双冒号运算符在 do.call 中指定函数

Mar*_*ann 5 r function call

使用sum和求和两个do.call向量将是

sum(1,2)
do.call("sum", list(1,2))
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法do.call使用双冒号进行工作?
  2. 为了了解:幕后发生了什么导致其失败?

efb*_*own 6

根据文档,whatargdo.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
Run Code Online (Sandbox Code Playgroud)

sum因此,虽然package 中有一个名为函数的函数base,但您无法通过指定 package 来命名该函数。相反,只需删除引号即可。