4-3 mapply
mapply:lapply的多元版本 mapply(参数):mapply(函数/函数名,数据,函数相关的参数)
例:list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))(第1个元素是4个1,第2个元素是3个2)
mapply(rep,1:4,4:1)(元素是1到4,4:1规定了前面元素要重复多少次)
定义函数: s<-function(n,mean,std){rnorm(n,mean,std)}(从随机分布的总体里抽取指定个数的数据)(花括号中意义是从均值为mean,标准差为std的总体里抽取n个数据)
调用函数:s(4,0,1)(从均值为0,标准差为1的正态分布总体里调用4个数据)
mapply(s,1:5,5:1,2)(1:5对应的4,即每一次抽取多少个数据出来,5:1对应的0,即分布的均值,2即为分布的标准差)
同上面的命令:list(s(1,5,2),s(2,4,2),s(3,3,2),s(4,2,2),s(5,1,2))
mapply(函数/函数名,数据,函数相关的参数)
mapply(rep,1:4,4:1) #输出4个1、3个2......1个4.
s <- function(n,mean,std){
rnorm(n,mean,std)
} #创建从正态分布中抽取n个元素的函数
s(4,0,1) #在均值为0标准差为1的正态分布中抽取4个数据
重要函数的使用
mapply
上面两条创建的列表是一样的
创建函数
mapply转化为list每次都要重新调用一次s
运行后得到一个列表
如何写自己的函数
首先s<-function()
(函数命名为s,先写function表示这是一个函数,第一个参数n表示要从正态分布中抽取的数据的个数,mean表示总体分布数据的均值,std表示随机分布的标准差,{}花括号内输入函数体,rnorm(n,mean,std)表示从mean,std的整体里抽取n个数据
写完函数需要运行一下才能调用
s(4,0,1)从均值为0,标准差1的正态分布里抽取四个数据
mapply(s,1:5,5:1,2)
1:5每一次要从数据里抽取几个数字,5:1表示分布的均值,2表示分布的标准差(分别表示与s的三个参数相对应)
mapply(rep,1:4,4:1)(函数,数据,与rep相关的)
mapply
mapply(函数名,数据,函数相关的参数)是lapply的多元版本,对列表(如正态分布)进行操作
rep(a,b)意思是b个a
rnorm(n,mean,std)表示从均值为mean,标准差为std的正态分布中抽取n个数据
mapply(函数/函数名,数据,函数相关的参数):lapply的多元版本;
//用来从随机分布的总体里抽取指定个数的数据
s<- function(n,mean,std){
rnorm(n,mean,std)
} //在均值为mean的标准差为std的正态分布里抽取n个数据
mapply(s,1:5,5:1,2)//s为函数名,抽取的数据,分布的均值,标准差
#Mapply
#lapply的多元版本 #mapply(函数/函数名,数据,函数相关的参数) list(rep(1,4),rep(2,3),rep(3,2),rep(4,1)) mapply(rep,1:4,4:1) s<-function(n,mean,std){rnorm(n,mean,std)}#写出自己的函数 s#运行上述定义的函数,必要 s(4,0,1)#使用具体数字 mapply(s, 1:5,5:1,2)#对应关系为后三个元素依次与s()中的三个元素一一对应
mapply(函数/函数名称,函数数据,函数相关参数)
list (rep(1:4), rep(2,3), rep(3,2), rep(4:1))
mapply(rep, 1:4, 4:1) #4:1 规定数据要重复多少次
s<-function(n, mean, std){
rnorm(n,mean,std)
} #从均值为mean,标准差为std的整体里抽取n个数据
s(4,0,1) # 从均值为0,标准差为1的整理里抽取四个数据
mapply(s, 1:5, 5:1, 2) #1:5 对应着n,每次在分布中抽取多少个数据出来 / 5;1 对应着mean,均值为多少 / 2代表std标注差
mapply:
lapply的多远版本
mapply(函数/函数名,数据,函数相关的参数) #相当于多次运行这个函数
list(rep(1,4),rep(2,3),rep(3,2),rep(4,1))可简化为mapply(rep,1:4,4:1)
R语言定义函数:
函数名 <- function(参数列表){
函数体
}