在管道中命名空间调用的函数的运算符优先级



请有人解释一下,当我在管道中使用名称空间调用函数时,为什么最后一行代码的行为会有所不同,以及错误消息的实际含义:

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很相似,但我猜它是受保护的或者是被编程的,它给了你那个描述

相关内容

  • 没有找到相关文章

最新更新