r语言 - 马格里特和日期对象



我刚刚注意到,当我互相减去两个日期,然后尝试使用 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

虽然这在这里没什么大不了的,但我想了解为什么这种情况能够预测其他(对我来说是意想不到的)行为。

试试这个,没有额外的括号,管道是计算 1st,然后减去。

(as.Date("2014-10-10") - as.Date("2014-10-1")) %>% as.numeric

"

全包magrittr解决方案"也有效。鉴于最近管道操作员的使用急剧增加,相当多的人评论说,过度接触管道操作员(和别名)可能会伤害他们的眼睛。因此扰流板块。

<块引用类>

如。日期("2014-10-10") %>%
减去(作为。日期("2014-10-1")) %>%
as.numeric

# [1] 9

我特别发现 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 个 bizarro。

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可以改进,仅此而已。

最新更新