R Apply()系列函数教程

本文通过示例介绍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家族函数,并通过示例进行对比不同函数之间差异。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值