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

标签 r namespaces dplyr piping magrittr

请有人解释为什么当我在管道中使用其命名空间调用函数时,最后一行代码的行为存在差异,以及错误消息的实际含义:

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/

相关文章:

r - 计算R中最近x天内ID的出现

r - 根据阈值更改文本颜色

r - 数音节

c++ - 由于使用了内部一种类型,命名空间设置为“已使用”?

Scala 冲突的继承方法名称

r - 控制 R 中枢轴的细节级别 (tidyverse)

r - 在特定列中包含 ROW MEAN 的新变量

r - 将输出从一个 R session 复制到另一个 R session

r - 使用 facet_wrap 和两个变量在 R 中排序条形图

c++ - 不明确的 C++ 编译器错误