是什么使润滑剂中的负数?

时间:2018-07-29 02:26:43

标签: r tidyverse lubridate

(today() %--% ymd("2000-01-01")) %/% years(1)
# -18
(ymd("2000-01-01") %--% today()) %/% years(1)
# 18

我认为2018-2000 = 18,而不是-18

我想知道我是否不完全了解%--%

1 个答案:

答案 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()的最终值早于开始日期,因此为负数。

我希望这可以澄清您的疑问。