R语言apply函数簇


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

R R语言小白速通
R 懂点R语言
欢迎分享收藏关注

发布了38 篇原创文章 · 获赞 13 · 访问量 3284

猜你喜欢

转载自blog.csdn.net/renewallee/article/details/103128060