请有人解释为什么当我在管道中使用其命名空间调用函数时,最后一行代码的行为存在差异,以及错误消息的实际含义:
library(magrittr)
1:5 %>% cumsum
#### [1] 1 3 6 10 15
1:5 %>% cumsum()
#### [1] 1 3 6 10 15
1:5 %>% base::cumsum()
#### [1] 1 3 6 10 15
1:5 %>% (base::cumsum)
#### [1] 1 3 6 10 15
1:5 %>% base::cumsum
#### Error in .::base : unused argument (cumsum)
我真的认为它会起作用,因为 operator precedence rules声明命名空间运算符 ::
的优先级最高,远离特殊运算符。
谢谢。
最佳答案
我认为这是因为它调用了函数的描述,base::cumsum
返回function (x) .Primitive("cumsum")
,它不采取任何参数,这就是错误所说的内容。添加 ()
(如上面的一行所示)后,它会使用 1:5
参数调用该函数。
更好的例子是你自己的函数。
foo<-function(){cat("hello")}
如果不带参数调用,则返回其代码:
> foo
function(){cat("hello")}
所以它与 base::cumsum
类似,但我猜它受到某种保护或只是被编程,从而为您提供了该描述。
关于r - 管道中命名空间调用的函数的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39956452/