💡
在R语言中,apply函数家族 是批量处理数据的核心工具。 相比 for 循环,它们更简洁、高效,是每个R用户必须掌握的技能。
1. apply() 函数
apply() 函数针对矩阵的行或列应用某一函数,是最基础的 apply 家族成员。
调用格式
apply(X, MARGIN, FUN, ...)
参数说明
X
阵列,包括矩阵
MARGIN
1=行,2=列,c(1,2)=两者
FUN
要应用的函数
使用示例
# 创建一个矩阵 mat <- matrix(1:12, nrow = 3, ncol = 4) # 对每行求和 (MARGIN = 1) apply(mat, 1, sum) # [1] 22 26 30 # 对每列求均值 (MARGIN = 2) apply(mat, 2, mean) # [1] 2 5 8 11 # 使用自定义函数 apply(mat, 1, function(x) max(x) - min(x))
💡 使用场景:主要适用于对矩阵行/列使用自定义函数 function(),用法灵活,比 for 循环效率更高。
2. lapply() 与 sapply() 函数
两者都是对列表或向量的每个元素应用函数,区别在于返回值类型。
调用格式
lapply(X, FUN, ...) sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
核心区别
| 函数 | 返回值类型 | 特点 |
|---|---|---|
| lapply | 总是返回列表 | 结果结构稳定 |
| sapply | 尽可能简化为向量/矩阵 | 结果更简洁 |
使用示例
# 创建一个列表 my_list <- list(a = 1:5, b = 6:10, c = 11:15) # lapply 返回列表 lapply(my_list, mean) # $a [1] 3 # $b [1] 8 # $c [1] 13 # sapply 返回向量 sapply(my_list, mean) # a b c # 3 8 13
📌 选择建议:如果需要稳定的返回结构,用 lapply;如果想要简洁的输出,用 sapply。
3. tapply() 函数
tapply() 函数针对基于因子类型的分组变量进行函数映射,非常适合分组统计。
调用格式
tapply(X, INDEX, FUN, ..., simplify = TRUE)
参数说明
X
一个原子向量
INDEX
因子列表,用于分组
simplify
是否简化结果
使用示例
# 模拟数据:不同性别的收入 income <- c(5000, 6000, 4500, 7000, 5500, 8000) gender <- factor(c("M", "F", "M", "F", "M", "F")) # 按性别计算平均收入 tapply(income, gender, mean) # F M # 7000 5000 # 按性别计算收入范围 tapply(income, gender, range)
💡 典型场景:统计男女两组人的收入汇总分析,使用 tapply 是最佳选择!
4. 函数选择速查表
| 函数 | 适用对象 | 返回值 | 典型场景 |
|---|---|---|---|
| apply | 矩阵/数组 | 向量/矩阵 | 对行列做统计 |
| lapply | 列表/向量 | 列表 | 保持返回结构 |
| sapply | 列表/向量 | 向量/矩阵 | 简化返回结果 |
| tapply | 向量 | 数组/列表 | 分组统计 |
📝 总结
✅ 核心要点
- • apply 用于矩阵行列操作
- • lapply/sapply 用于列表元素
- • tapply 用于分组统计
- • 比 for 循环更高效简洁
🔍 获取帮助
- •
?apply查看帮助 - •
example(lapply)查看示例 - • 多练习,熟能生巧!