(today() %--% ymd("2000-01-01")) %/% years(1)
# -18
(ymd("2000-01-01") %--% today()) %/% years(1)
# 18
我认为2018-2000 = 18,而不是-18
我想知道我是否不完全了解%--%
答案 0 :(得分:2)
必须在他们的环境中使用library(lubridate)
来获得此infix函数。
因此,如果您转到?%--%
的文档,它将显示:
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
根据文档,使用infix函数%--%
也会发生类似的行为:
%-%创建一个覆盖两个日期范围的间隔。
它的工作原理类似于您的间隔函数,因为它调用了间隔函数。您可以通过打印body(`%--%`)
进行检查,现在,如果您在infix函数的开始日期中提供第一个参数,该日期在结束日期之前,则给定输出为正,否则为负。
请记住该函数说出开始日期和结束日期,这意味着开始日期应该较小,而结束日期应该是较大的日期值,以得到肯定的结果。在您的情况下,today()的最终值早于开始日期,因此为负数。
我希望这可以澄清您的疑问。