【发布时间】:2018-07-29 02:26:43
【问题描述】:
(today() %--% ymd("2000-01-01")) %/% years(1)
# -18
(ymd("2000-01-01") %--% today()) %/% years(1)
# 18
我认为 2018 - 2000 = 18,而不是 -18
不知道是不是完全看不懂%--%
【问题讨论】:
(today() %--% ymd("2000-01-01")) %/% years(1)
# -18
(ymd("2000-01-01") %--% today()) %/% years(1)
# 18
我认为 2018 - 2000 = 18,而不是 -18
不知道是不是完全看不懂%--%
【问题讨论】:
必须使用library(lubridate) 在他们的环境中获取此中缀函数。
所以如果你去 ?%--% 的文档,它说:
interval() 创建一个具有指定开始和结束的 Interval 对象 日期。如果开始日期早于结束日期,则间隔将 要乐观。否则为负数。
interval(today(), ymd("2000-01-01"))/years(1)
#start date occurs after the end date, this should be negative
打印interval(today(), ymd("2000-01-01"))只会显示区间范围而不是符号,如果你使用as.numeric或使用years(1)除法,它会显示符号,因此会出现这种情况:
> interval(today(), ymd("2000-01-01"))/years(1)
[1] -18.57377
根据文档,中缀函数 %--% 会发生类似的行为:
%--% 创建一个覆盖两个日期范围的区间。
它的工作原理类似于您的区间函数,因为它调用区间函数。您可以通过打印 body(`%--%`) 来检查这一点,现在如果您在中缀函数开始日期中提供第一个参数,该日期发生在结束日期之前,则给定输出为正,否则为负。
记住函数说开始和结束日期,这意味着开始应该更小,结束应该是更大的日期值以获得积极的结果。在您的情况下,今天()是开始日期之前的结束值,因此它是负数。
我希望这能澄清你的疑问。
【讨论】: