在做一些更复杂的事情的过程中,我发现了以下几点:如果我使用do.call将数字向量转换为列表,我会从应用的函数中得到一个不同的值,我不知道为什么。
x <- rnorm(30)
median(x) # -0.01192347
# does not match:
do.call("median",as.list(x)) # -1.912244
为什么?
注意:我正在尝试使用函数名向量来运行各种函数。这适用于do.call,但前提是我从do.call获得正确的输出。
谢谢你的建议。
因此do.call
希望args
参数是参数列表,因此从技术上讲,我们希望传递list(x = x)
:
> set.seed(123)
> x <- rnorm(10)
> median(x)
[1] -0.07983455
> do.call(median,list(x = x))
[1] -0.07983455
> do.call(median,as.list(x))
[1] -0.5604756
在向量x
上调用as.list
会将其变成一个长度为10的列表,就好像您要调用median
并向其传递10个单独的参数一样。但实际上,我们只通过了一个x
。因此,最后它只获取向量的第一个元素,并将其传递给参数x
。