使用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"
do.call
使用双冒号? 答案 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)
(即反引号中的双冒号运算符是一个函数),其中pkgname
和fname
可以是对象或命名对象的字符,因此我们可以使{{1}的`::`
自变量what
并在列表中传递do.call
和pkgname
(作为字符)作为fname
自变量。由args
命名的函数的参数将在fname
调用之后出现。因此:
do.call