R语言:为什么我可以通过Sapply功能得到以下结果?

时间:2017-01-07 13:27:04

标签: r sapply

 x<- split(mtcars,mtcars$cyl)
 sapply(x,'[',"mpg")

&#34;从上面的代码中,有人可以向我解释为什么我可以得到以下结果以及为什么将'['放入sapply可以获得以下结果?&#34; < / p>

$`4.mpg`
 [1] 22.8 24.4 22.8 32.4 30.4 33.9 21.5 27.3 26.0 30.4 21.4

$`6.mpg`
[1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7

$`8.mpg`
 [1] 18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 13.3 19.2 15.8 15.0

1 个答案:

答案 0 :(得分:4)

如果查看sapply()的args,您会看到给它的前三个未命名参数将被视为输入数据(X),即要应用的函数({{ 1}})和传递给该函数的其他参数(FUN

...

因此,当您在> args('sapply') function (X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE) > help('sapply') ... X: a vector (atomic or list) or an ‘expression’ object. Other objects (including classed objects) will be coerced by ‘base::as.list’. FUN: the function to be applied to each element of ‘X’: see ‘Details’. In the case of functions like ‘+’, ‘%*%’, the function name must be backquoted or quoted. ...: optional arguments to ‘FUN’. 上拆分产生的列表上调用sapply(x,'[',"mpg")时,您实际上是在列表中的每个元素上调用索引运算符mpg,并传递字符串{ {1}},例如:

[

最后,在将结果汇总回列表的过程中,名称会丢失,因此您最终得到:

mpg