我刚注意到一个奇怪而有趣的错误:
as.numeric((Sys.Date()-30)-Sys.Date())
#[1] -30
哪个是对的。但是:
library(dplyr)
(Sys.Date()-30)-Sys.Date() %>% as.numeric()
#[1] "1969-12-02"
如果%>%
只是将输出提供给第一个参数槽,那么这种行为肯定不正确吗?
答案 0 :(得分:5)
我修改了您的代码,使其可以在将来重现:
date <- as.Date("2016-10-18")
as.numeric((date-30)-date)
#[1] -30
(date-30)-date %>% as.numeric()
#[1] "1969-12-02"
您可能还注意到放置括号可以更改这些结果:
(date-30)-(date %>% as.numeric())
#[1] "1969-12-02"
((date-30)-date) %>% as.numeric()
#[1] -30
答案按照Syntax help page中指定的操作顺序排列。它声明:
定义了以下一元和二元运算符。它们被列出来了 在优先组中,从最高到最低。
:: :::访问命名空间中的变量
$ @ component / slot extraction
[[[索引] ^指数(从右到左)
- +一元减号和加号 :序列运算符
%any%特殊运算符(包括%%和%/%)
* /乘,划分
+ - (二进制)加,减
请注意,%any%
出现在+ - (binary)
之前。对于一元和二元运算符之间的区别,我推荐this question的答案。