Skip to main content
 首页 » 编程设计

R语言Apply()系列函数教程

2022年07月19日177telwanggs

本文通过示例介绍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
阅读延展