lapply
接收一个向量(vector,list)和一个函数作为输入参数。它将这个函数应用到向量中的每个元素,再将结果以列表的形式返回。
sprintf() 类似python的格式化输出,%占位符
sapply( )
可以根据结果的结构将结果放在一个向量或者矩阵、列表中
通过simplify=TRUE简化结果(list可简化为matrix)
x1 <- list(c(1,2),c(2,3),c(3,4,5))
sapply(x1,function(x) x^2,simplify=TRUE)
vapply( )
通过一个附加参数来设定每次迭代返回值的模板。下面这段代码,指定模板为numeric(2),意味着每次迭代都返回一个包含2个元素的数值向量。如果不能按照既定模板进行输出,函数就会终止,并产生错误信息
> vapply(x1,function(x) x^2, numeric(2))
# Error in vapply(x1, function(x) x^2, numeric(2)) : 值的长度必需为2, 但FUN(X[[3]])结果的长度却是3
mapply( )
是sapply的多元版本
依次应用每一个参数的第一个元素、第二个元素、第三个元素上
> a <- matrix(1:12,c(3,4))
> a
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> mapply(function(x,y,z) x+y+z,a[,1],a[,2],a[,3])
[1] 12 15 18
apply
将一个函数应用到矩阵或数组的某个边际(margin)或维度上。计算矩阵每一行的和,因为行是矩阵的第1个维度,所以我们指定MARGIN = 1
tapply
(X, INDEX, FUN = NULL, …, simplify = TRUE)
> fac <- factor(rep(c("low","middle","high","plus","max"),2))
> table(fac)
fac
high low max middle plus
2 2 2 2 2
> tapply(1:10, fac, sum)
high low max middle plus
11 7 15 9 13