magrittr和日期对象

magrittr和日期对象,r,magrittr,R,Magrittr,我刚刚注意到,当我从两个日期中减去另一个日期,然后尝试用magrittr(%%>%%)转换为一个数值时,我得到了一个日期,就像我简单地将日期差包装在as.numeric()中一样,我得到了天数差作为一个数值。请参见下面的简单示例: ## version 1 as.Date("2014-10-10") - as.Date("2014-10-1") %>% as.numeric ## return value --> "1970-01-10" ## version 2 (return

我刚刚注意到,当我从两个日期中减去另一个日期,然后尝试用magrittr(
%%>%%
)转换为一个数值时,我得到了一个日期,就像我简单地将日期差包装在
as.numeric()
中一样,我得到了天数差作为一个数值。请参见下面的简单示例:

## version 1
as.Date("2014-10-10") - as.Date("2014-10-1") %>% as.numeric
## return value -->  "1970-01-10"

## version 2 (returning the value that I actually want)
as.numeric(as.Date("2014-10-10") - as.Date("2014-10-1"))
## return value --> 9

虽然这不是什么大不了的事,但我想理解为什么这恰好能够预测其他(对我来说是意外的)行为。

试试这个,没有额外的括号,管道是先计算的,然后是减法

(截止日期(“2014-10-10”)-截止日期(“2014-10-1”))%>%as.numeric
一个“一体式
magrittr
解决方案”也可以工作。鉴于最近管道操作员的使用急剧增加,不少人评论说,过度接触管道操作员(和别名)可能会伤害他们的眼睛。因此,扰流块

截止日期(“2014-10-10”)%>% 减去(截止日期(“2014-10-1”))%>% 如:数字


我特别觉得magrittr中操作的命名非常烦人。在给定的示例中,我将使用

library(magrittr)
as.Date("2014-10-10") - as.Date("2014-10-1") %>% as.numeric
## [1] "1970-01-10"
as.Date("2014-10-10") - as.Date("2014-10-1") ->.; as.numeric(.)
## [1] 9
更进一步说,虽然在下面的示例中需要3个管道来获得周差(我不喜欢@zx8754提供的括号解决方案,因为我认为它首先违背了使用管道的目的),但您可以只使用1个Bizaro

as.Date("2014-10-10") %>% subtract(as.Date("2014-08-1")) %>% as.numeric %>% divide_by(7)
## [1] 10
as.Date("2014-10-10") - as.Date("2014-08-1") ->.; as.numeric(.)/7
## [1] 10

我并不是说使用bizarro是解决方案,我只是认为magrittr可以改进,仅此而已。

为什么不使用
%%>%%
vs“
前进管道操作员”
”(还有,为什么“扰流板”块?@Henrik修复了管道,管道后需要额外的空间来指示新线。对不起,那么为什么需要额外的括号呢?在管道被传递到as.numeric之前,我会认为一切都是正确的。我不知道为什么需要它,但我希望它能以这种方式运行。@zx8754谢谢。这仍然让我对使用管道的意外输出感到有点紧张。也许其他人有更好的理解。
as.Date("2014-10-10") %>% subtract(as.Date("2014-08-1")) %>% as.numeric %>% divide_by(7)
## [1] 10
as.Date("2014-10-10") - as.Date("2014-08-1") ->.; as.numeric(.)/7
## [1] 10