R语言中的apply函数簇可以不通过for循环方式,实现对象迭代处理。可以有效提高运行效率。
包括:lapply、sapply、vapply、mapply、tapply、apply。
lapply
lapply接收一个向量和一个函数作为函数。
lapply(list,FUN,…)
示例:
#x为列表
x <- list(a=1:5,b=6:10,c=11:15)
#x
x
$a
[1] 1 2 3 4 5
$b
[1] 6 7 8 9 10
$c
[1] 11 12 13 14 15
#lapply函数
lapply(x, mean)
$a
[1] 3
$b
[1] 8
$c
[1] 13
sapply
类似于lapply,以向量形式返回。
sapply(list,FUN,…)
示例:
#列表
x <- list(a=1:5,b=6:10,c=11:15)
#spply函数
sapply(x, mean)
a b c
3 8 13
#结果同lapply,以向量形式返回。
vapply
vapply函数通过一个附加参数来设定每次迭代返回的模板。以模板定义返回。它是sapply函数的安全升级版。
vapply(list,FUN,FUN.VAlUE=type,…)
示例:
x <- list(a=1:5,b=6:10,c=11:15)
#指定模板返回数据类型为数值型
vapply(x, mean,c(1))
a b c
3 8 13
mapply
lapply()和sapply()函数在一个向量上迭代。mapply可以实现多个向量的迭代。返回标量、多元素向量。
mapply(FUN,…)
示例:
x1 <- list(a = c(1:10), b = c(11:20))
x2 <- list(c = c(21:30), d = c(31:40))
#mapply函数
mapply(sum, x1$a, x1$b, x2$c, x2$d)
[1] 64 68 72 76 80 84 88 92 96 100
tapply
可以进行分组迭代。
tapply(X,index,FUN)
x为向量,index为向量索引,FUN为函数。
#生成向量x
x <- c(10,25,26,30,35)
#建立x的索引
b <- c('A','B','A','B','A')
#按索引分组迭代求和
tapply(x, b, sum)
A B
71 55
apply
apply函数将一个函数应用到矩阵或数组的某个边际(margin)或维度。
apply(x,margin,FUN)
参数 | 描述 |
---|---|
x | 矩阵或数组 |
margin | margin=1,指定行维度。margin=2,指定列维度。 |
FUN | 函数 |
示例:
#生成一个2行矩阵
x <- matrix(1:10,nrow = 2)
#矩阵
x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
#按行进行数据相加
apply(x, 1, sum)
#第一行总和25,第二行总和30
[1] 25 30
#按列进行数据相加
apply(x, 2, sum)
#依次展示5列数据相加的情况
[1] 3 7 11 15 19