这应该很简单,但我无法弄清楚。假设我有一个带有 n 参数的函数,比如说:
example <- function(a, b, c){a*b + c}
我还有一个长度为 n 的向量x
,并希望将其用作该函数的输入,即:我想评估
example(x[1], x[2], x[3])
当然,输入 n = 3 并不是很糟糕,但是从 n = 5 开始它会变得烦人。理想情况下,我只需输入
example(x)
让R了解我的意思,但这不起作用。 (它会告诉我argument b missing with no default
,显然会将x
全部归为a
,然后就没有任何东西可以使用了。)
这样做有一些技巧,例如通过自动生成代码"a = x[1]; b = x[2]; c = x[3]"
,然后在定义的其余部分之前神奇地将此引用并在example
内进行评估?
答案 0 :(得分:0)
您可以使用do.call
解决此问题。但是你必须将函数的参数(do.call
的第二个参数)强制转换为list
。
example <- function(a, b, c){a*b + c}
x <- 1:3
do.call(example, as.list(x))
#[1] 5
但请注意,如果向量太短或太长,这将失败:
y <- 1:4
do.call(example, as.list(y))
#Error in (function (a, b, c) : unused argument (4)