dplyr date as.numeric奇怪的行为

时间:2016-10-18 14:10:58

标签: r dplyr

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

as.numeric((Sys.Date()-30)-Sys.Date())
#[1] -30

哪个是对的。但是:

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

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

1 个答案:

答案 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的答案。