3

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

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

4

3 回答 3

4

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

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

于 2015-01-26T10:26:00.107 回答
3

“全面magrittr解决方案”也有效。鉴于最近使用管道操作员的人数急剧增加,不少人评论说,过度接触管道操作员(和化名)可能会伤害他们的眼睛。因此扰流板。

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

# [1] 9
于 2015-01-26T10:37:58.913 回答
0

我特别发现 magrittr 中的操作命名非常烦人。在给定的示例中,我会使用bizarro pipe,就像一个魅力

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

于 2017-02-14T21:11:49.837 回答