❝apply 家族是 R 语言中常用的函数,用于对列表、数组或其他类型的数据进行循环操作。 ❞
apply 家族包括以下几个函数:
❝lapply:用于遍历列表中的每一个元素,并对其执行函数操作。 sapply:与 lapply 类似,但它自动将结果转换为向量、矩阵或数组。 apply:用于对矩阵或数组的行、列或其他维度进行循环操作。 tapply:用于根据某个分组变量对数据进行分组,并对每组数据分别执行函数操作。 ❞
下面是 lapply 的基本语法:
代码语言:javascript复制lapply(数据, 函数)
其中,数据是一个列表或其他数据类型,函数是要对数据执行的操作。
例如,下面的代码使用 lapply 函数对列表中的每个字符串执行 toupper 函数,将其转换为大写:
代码语言:javascript复制# 创建列表
x <- list("apple", "banana", "cherry")
# 使用 lapply 函数对列表中的每个字符串执行 toupper 函数
lapply(x, toupper)
代码语言:javascript复制[[1]]
[1] "APPLE"
[[2]]
[1] "BANANA"
[[3]]
[1] "CHERRY"
注意,lapply 函数的返回值是一个列表,其中每个元素表示对应的数据执行函数后的结果。
❝如果想要将结果转换为向量、矩阵或数组,可以使用 sapply 函数。它的基本语法与 lapply 类似,只是将 lapply 替换为 sapply 即可。 ❞
例如,下面的代码使用 sapply 函数将列表中的每个字符串转换为大写:
代码语言:javascript复制# 创建列表
x <- list("apple", "banana", "cherry")
# 使用 sapply 函数对列表中的每个字符串执行 toupper 函数
sapply(x, toupper)
代码语言:javascript复制[1] "APPLE" "BANANA" "CHERRY"
注意,sapply 函数的返回值是一个向量,其中的每个元素表示对应的数据执行函数后的结果。
另外,apply 函数用于对矩阵或数组的行、列或其他维度进行循环操作。它的基本语法如下:
代码语言:javascript复制apply(矩阵或数组, 维度, 函数)
其中,矩阵或数组是要操作的数据,维度是指定要对哪一维度进行操作,函数是要对数据执行的操作。
例如,下面的代码使用 apply 函数求出矩阵中每一列的和:
代码语言:javascript复制# 创建矩阵
x <- matrix(1:9, nrow = 3)
# 使用 apply 函数求出矩阵中每一列的和
apply(x, 2, sum)
代码语言:javascript复制[1] 6 15 24
❝上面介绍了apply 家族函数的原理,下面来举几个使用 apply 家族函数处理数据的小例子: ❞
例子 1:求出矩阵中每一列的最大值
下面的代码使用 apply 函数求出矩阵中每一列的最大值:
代码语言:javascript复制# 创建矩阵
x <- matrix(1:9, nrow = 3)
# 使用 apply 函数求出矩阵中每一列的最大值
apply(x, 2, max)
代码语言:javascript复制[1] 3 6 9
例子 2:使用 apply 函数将矩阵转置
下面的代码使用 apply 函数将矩阵转置:
代码语言:javascript复制# 创建矩阵
x <- matrix(1:9, nrow = 3)
# 使用 apply 函数将矩阵转置
apply(x, 1, function(row) row)
代码语言:javascript复制 [,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
例子 3:使用 sapply 函数计算列表中所有数字的平方和 下面的代码使用 sapply 函数计算列表中所有数字的平方和:
代码语言:javascript复制# 创建列表
x <- list(1, 2, 3, 4, 5)
# 使用 sapply 函数计算列表中所有数字的平方和
sapply(x, function(x) x^2) %>% sum
代码语言:javascript复制[1] 55
例子 4:使用 tapply 函数根据性别分组并求平均身高
假设我们有以下数据,表示不同性别的人的身高:
代码语言:javascript复制# 创建数据框
df <- data.frame(
gender = c("M", "F", "M", "F", "M", "F"),
height = c(170, 160, 175, 155, 180, 165)
)
# 使用 tapply 函数根据性别分组,并求出每组的平均身高
tapply(df$height, df$gender, mean)
代码语言:javascript复制 F M
162.50 176.67
注意,tapply 函数的返回值是一个向量,其中的每个元素表示对应的分组的平均值。
总结
❝apply 家族是 R 语言中常用的函数,用于对列表、数组或其他类型的数据进行循环操作。它们包括 lapply、sapply、apply 和 tapply 函数,每个函数都有各自的用途。使用这些函数可以方便地对数据进行多种操作,提高编程效率。 ❞