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() 函数

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注