R 中的 lapply 与 sapply:有什么区别?
R 中的lapply()函数可用于将函数应用于列表、向量或数据帧的每个元素,并相应地获得列表。
sapply()函数还可用于将函数应用于列表、向量或数据帧的每个元素,但它返回一个向量作为结果。
以下示例展示了如何在 R 中使用这些函数。
示例:如何在 R 中使用 apply()
以下代码演示如何使用lapply()函数将数据帧每列中的每个值乘以 2:
#create data frame df <- data. frame (x=c(1, 2, 2, 3, 5), y=c(4, 4, 6, 7, 8), z=c(7, 7, 9, 9, 9)) #view data frame df X Y Z 1 1 4 7 2 2 4 7 3 2 6 9 4 3 7 9 5 5 8 9 #multiply each value in each column by 2 lapply(df, function (df) df*2) $x [1] 2 4 4 6 10 $y [1] 8 8 12 14 16 $z [1] 14 14 18 18 18
请注意,结果是一个列表。
示例:如何在 R 中使用 sapply()
以下代码演示如何使用sapply()函数将数据帧每列中的每个值乘以 2:
#create data frame df <- data. frame (x=c(1, 2, 2, 3, 5), y=c(4, 4, 6, 7, 8), z=c(7, 7, 9, 9, 9)) #view data frame df X Y Z 1 1 4 7 2 2 4 7 3 2 6 9 4 3 7 9 5 5 8 9 #multiply each value in each column by 2 sapply(df, function (df) df*2) X Y Z [1,] 2 8 14 [2,] 4 8 14 [3,] 4 12 18 [4,] 6 14 18 [5,] 10 16 18
请注意,结果是一个向量矩阵。
请注意,您可以使用as.data.frame()返回数据框而不是矩阵:
#multiply each value in each column by 2 and return a data frame as. data . frame (sapply(df, function (df) df*2)) X Y Z 1 2 8 14 2 4 8 14 3 4 12 18 4 6 14 18 5 10 16 18
何时使用 lapply() 或 sapply()
在 99% 的情况下,您将使用sapply() ,因为返回向量或矩阵更有意义。
但是,在极少数情况下,如果您希望结果是列表,则可能需要使用lapply() 。
请注意, sapply()和lappy()对向量、矩阵或数据框执行相同的操作。唯一的区别在于返回对象的类。
其他资源
如何将函数应用于 R 中的每个数据框行
如何在 R 中使用 colSums() 函数
如何在 R 中使用 rowSums() 函数