为什么sapply()和lapply()有相同的结果?

时间:2016-04-08 08:51:08

标签: r

我是R.的新手。我正在练习lapply()和sapply()函数:lapply()返回list,sapply()返回vector / matrix。现在我不明白为什么lapply()和sapply()与列表有相同的结果?

> x1 <- lapply(list(1:3, 25:29), function(x) {2*x})
> x2 <- sapply(list(1:3, 25:29), function(x) {2*x})
> x1
[[1]]
[1] 2 4 6

[[2]]
[1] 50 52 54 56 58

> x2
[[1]]
[1] 2 4 6

[[2]]
[1] 50 52 54 56 58

> str(x2)
List of 2
 $ : num [1:3] 2 4 6
 $ : num [1:5] 50 52 54 56 58
> mode(x2)
[1] "list"

之后,我检查了unlist()并返回与向量相同的输入。 很难理解为什么sapply()会返回列表类型。

谢谢。

1 个答案:

答案 0 :(得分:5)

如果length元素的list不相同,sapply将不会将其强制转换为矩阵,并且与lapply

的结果相同

我们可以查看?sapply?lapply

的使用情况
  

lapply(X,FUN,...)

     

sapply(X,FUN,...,simplify = TRUE,USE.NAMES = TRUE)

simplify=TRUE是将list等长输出转换为matrix的广告