1

我有兴趣在代码中使用 / 中的特殊调用calleval

eval(call("mean", c(2,3)))

这将正确产生结果2.5。现在,我想使用与特殊调用相同的语法。

例子:+

  1. 称呼:

    eval(call("`+`", c(2,3)))
    

    产生错误:

    eval 中的错误(expr、envir、enclos):找不到函数“ +

  2. 与调用类似,

    eval(call("+", c(2,3)))
    

    不会产生预期的结果:

    [1] 2 3
    

所需的结果应该简单地返回通过调用获得的长度为 1 且具有单个值5的向量。2 + 3

4

1 回答 1

7

eval(call("+", c(2,3)))工作得很好。您正在使用向量调用一元加号,该向量返回相同的向量。

如果你想使用 binary plus,你需要提供两个参数:

eval(call("+", 2, 3))
#[1] 5

do.call在生产代码中应该更可取:

do.call("+", list(2, 3))
#[1] 5
于 2017-04-26T13:44:28.417 回答