本文通过示例介绍R中Apply()系列函数教程。
1. Apply 函数
Apply函数,仅当数据是两维或以上时才可使用,即只有两维以上数值或矩阵作为待处理数据。
data1 <- matrix(1:16,nrow = 4)
# 处理行数据
apply(data1, 1, sum)
# 处理列数据
apply(data1, 2, sum)
# 同时处理行和列数据
apply(data1, 1:2 ,function(x) x*5)
# 输出结果
[1] 28 32 36 40
[1] 10 26 42 58
[,1] [,2] [,3] [,4]
[1,] 5 25 45 65
[2,] 10 30 50 70
[3,] 15 35 55 75
[4,] 20 40 60 80
2. lapply 函数
对向量或list数据中每个元素应用给定函数。与apply函数处理两维或以上数据不同,lapply没有margin参数:
# lapply(list, function)
? lapply
A = matrix(1:16, nrow = 4)
B = 1:10
C = 15:20
# 生成list
my_list <- list(A,B,C)
my_list
# 对列表元素求和,返回列表结构
lapply(my_list, sum)
# 以向量结构返回结果
unlist(lapply(my_list, sum))
# 应用自定义函数
lapply(my_list, function(x) x + 10)
# 输出结果
[1] 28 32 36 40
[1] 10 26 42 58
[,1] [,2] [,3] [,4]
[1,] 5 25 45 65
[2,] 10 30 50 70
[3,] 15 35 55 75
[4,] 20 40 60 80
Show in New Window
[[1]]
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
[[2]]
[1] 1 2 3 4 5 6 7 8 9 10
[[3]]
[1] 15 16 17 18 19 20
[[1]]
[1] 136
[[2]]
[1] 55
[[3]]
[1] 105
[1] 136 55 105
[[1]]
[,1] [,2] [,3] [,4]
[1,] 11 15 19 23
[2,] 12 16 20 24
[3,] 13 17 21 25
[4,] 14 18 22 26
[[2]]
[1] 11 12 13 14 15 16 17 18 19 20
[[3]]
[1] 25 26 27 28 29 30
3. sapply函数
与lapply函数类似,是尝试对lapply函数进行简化。sapply是对lapply函数的封装。
# 语法如下:
# sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
sapply(my_list, sum)
# 如果不想简化,还是返回list
#sapply(my_list, sum, simplify = FALSE)
# 当然也支持自定义函数
sapply(my_list, function(x) x + 5)
# 输出结果
[1] 28 32 36 40
[1] 10 26 42 58
[,1] [,2] [,3] [,4]
[1,] 5 25 45 65
[2,] 10 30 50 70
[3,] 15 35 55 75
[4,] 20 40 60 80
Show in New Window
[1] 136 55 105
[[1]]
[,1] [,2] [,3] [,4]
[1,] 6 10 14 18
[2,] 7 11 15 19
[3,] 8 12 16 20
[4,] 9 13 17 21
[[2]]
[1] 6 7 8 9 10 11 12 13 14 15
[[3]]
[1] 20 21 22 23 24 25
4. tapply 函数
以及因子分组应用特定函数。
#? tapply
# tapply(X, INDEX, FUN = NULL, ..., default = NA, simplify = TRUE)
datasets::iris
head(iris)
# 根据不同类型花萼的平均长度
tapply(iris$Sepal.Length, iris$Species, mean)
# 计算中位数
tapply(iris$Sepal.Length, iris$Species, median)
x # 输出结果
setosa versicolor virginica
5.006 5.936 6.588
setosa versicolor virginica
5.0 5.9 6.5
5. 总结
本文学习apply家族函数,并通过示例进行对比不同函数之间差异。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/120781744