基础篇 02

R语言 apply 函数家族详解

批量处理数据的核心工具,告别低效的 for 循环

📚
学习提示: 本教程内容仅供学习参考,实际应用时请结合具体数据和场景进行调整。 代码和方法可能需要根据实际情况进行修改。
💡

在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) 查看示例
  • • 多练习,熟能生巧!