【问题标题】:What makes negative number in lubridate?是什么使负数成为lubridate?
【发布时间】: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

不知道是不是完全看不懂%--%

【问题讨论】:

    标签: r tidyverse lubridate


    【解决方案1】:

    必须使用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(`%--%`) 来检查这一点,现在如果您在中缀函数开始日期中提供第一个参数,该日期发生在结束日期之前,则给定输出为正,否则为负。

    记住函数说开始和结束日期,这意味着开始应该更小,结束应该是更大的日期值以获得积极的结果。在您的情况下,今天()是开始日期之前的结束值,因此它是负数。

    我希望这能澄清你的疑问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2012-05-25
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      相关资源
      最近更新 更多