dplyr date as.numeric奇怪的行为

Ami*_*hli 3 r dplyr

我刚注意到一个奇怪而有趣的错误:

as.numeric((Sys.Date()-30)-Sys.Date())
#[1] -30
Run Code Online (Sandbox Code Playgroud)

哪个是对的.但:

library(dplyr)
(Sys.Date()-30)-Sys.Date() %>% as.numeric()
#[1] "1969-12-02"
Run Code Online (Sandbox Code Playgroud)

如果%>%简单地将输出提供给第一个参数槽,那么这种行为肯定不正确吗?

seb*_*n-c 5

我已经修改了你的代码,使它在未来可以重现:

date <- as.Date("2016-10-18")

as.numeric((date-30)-date)
#[1] -30
(date-30)-date %>% as.numeric()
#[1] "1969-12-02"
Run Code Online (Sandbox Code Playgroud)

您可能还注意到放置括号可以更改这些结果:

(date-30)-(date %>% as.numeric())
#[1] "1969-12-02"
((date-30)-date) %>% as.numeric()
#[1] -30
Run Code Online (Sandbox Code Playgroud)

答案是按语法帮助页面上指定的操作顺序进行的.它指出:

定义了以下一元和二元运算符.它们列在优先级组中,从最高到最低.

::::访问命名空间中的变量
$ @ component/slot extract
[[[indexing
^ exponentiation(从右到左)
- +一元减号和加号
:序列运算符
%任何%特殊运算符(包括%%和%/%)
*/乘,除
+ - (二进制)加,减

请注意这里%any%之前+ - (binary).对于一元和二元运算符之间的区别,我建议这个问题的答案.