请有人解释为什么最后一行代码的行为存在差异,当我在管道中使用其命名空间调用函数时,以及错误消息实际意味着什么:
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表明最高优先级是命名空间运算符::
,远离特殊运算符。
感谢。
答案 0 :(得分:3)
我认为这是因为它调用函数的描述,base::cumsum
返回function (x) .Primitive("cumsum")
,它不接受任何参数,这就是错误所说的。在您看到上面的一行时添加()
,它会使用1:5
参数调用该函数。
更好的例子是你自己的功能。
foo<-function(){cat("hello")}
如果不带参数调用,则返回其代码:
> foo
function(){cat("hello")}
所以它与base::cumsum
类似,但我猜它是以某种方式受到保护或只是编程给你的描述。