R为什么do.call与直接计算不匹配



在做一些更复杂的事情的过程中,我发现了以下几点:如果我使用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

最新更新