快速掌握apply函数家族推荐这篇文档

2022-12-22 11:08:40 浏览数 (2)

❝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 函数,每个函数都有各自的用途。使用这些函数可以方便地对数据进行多种操作,提高编程效率。 ❞

0 人点赞