请有人解释一下,当我在管道中使用名称空间调用函数时,为什么最后一行代码的行为会有所不同,以及错误消息的实际含义:
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)
我真的认为它会工作,因为操作符优先级规则声明最高优先级是命名空间操作符::
,远离特殊操作符。
谢谢。
我认为这是因为它调用了函数的描述,base::cumsum
返回不带任何参数的function (x) .Primitive("cumsum")
,这就是错误所说的。一旦添加了()
(如上所示),它就会调用带有1:5
参数的函数。
甚至更好的例子是你自己的函数。
foo<-function(){cat("hello")}
如果不带参数调用,则返回其代码:
> foo
function(){cat("hello")}
它和base::cumsum
很相似,但我猜它是受保护的或者是被编程的,它给了你那个描述