在 call 中使用特殊函数调用的正确语法

Correct syntax for using special function call in call

我有兴趣在 call/eval 中使用 special call,如代码所示:

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

将正确生成结果 2.5. 现在,我想对 special call.

使用相同的语法

示例:+

  1. 通话:

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

    产生错误:

    Error in eval(expr, envir, enclos) : could not find function "+"

  2. 与调用类似,

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

    没有产生预期的结果:

    [1] 2 3
    

期望的结果应该只是 return 长度为 1 的向量,具有单个值 5,通过 2 + 3 调用获得。

eval(call("+", c(2,3))) 工作正常。您正在用向量调用一元加号,returns 相同的向量。

如果你想使用二进制加法,你需要提供两个参数:

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

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

do.call("+", list(2, 3))
#[1] 5