双冒号运算符在do.call

时间:2018-02-09 11:30:32

标签: r function call

使用sum及其do.call等价物求和两个向量将是

sum(1,2)
do.call("sum", list(1,2))

使用双冒号运算符(sum)指定base::sum函数将在第一个函数中起作用,但在do.call情况下失败。

base::sum(1,2)
do.call("base::sum", list(1,2))
> Error in `base::sum`(1, 2) : could not find function "base::sum"
  1. 有没有办法让do.call使用双冒号?
  2. 为了学习:幕后发生的事情 失败吗

2 个答案:

答案 0 :(得分:2)

根据文档,what的{​​{1}} arg将采用do.call

如果你尝试实现没有引号的双冒号,它可以工作:

either a function or a non-empty character string naming the function to be called.

因此,虽然包> do.call(base::sum, list(1,2)) [1] 3 中有一个名为sum的函数,但您也无法通过指定包来命名该函数。相反,只需删除引号。

答案 1 :(得分:1)

可以使用do.call调用带有指定为字符的包和函数的双冒号运算符。由于pkgname::fname等效于`::`(pkgname, fname)(即反引号中的双冒号运算符是一个函数),其中pkgnamefname可以是对象或命名对象的字符,因此我们可以使{{1}的`::`自变量what并在列表中传递do.callpkgname(作为字符)作为fname自变量。由args命名的函数的参数将在fname调用之后出现。因此:

do.call