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
答案 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