为什么365天等于80000年?

时间:2016-08-26 09:37:38

标签: r lubridate

我有一个lubridate interval,想要将天数作为整数。但是我得到以下奇怪的中间结果:

library("lubridate")
i1 <- interval("2015-01-01 00:00:00", "2016-01-01 00:00:00")
i1 <- interval(ymd_hms("2015-01-01 00:00:00"), ymd_hms("2016-01-01 00:00:00")) # Gives the same result
duration(i1)
# [1] "31536000s (~365 days)"
duration(i1, units = "days")
# [1] "2724710400000s (~86340.86 years)"

这是两个有效的快捷方式。后者抛出一条消息“强制间隔到持续时间”(我不知道原因......)

> as.numeric(as.duration(i1), units = "days")
[1] 365
> as.numeric(i1, units = 'days')

(R版本3.3.0日期为2016-05-03,lubridate版本1.5.6。)

2 个答案:

答案 0 :(得分:27)

你误解了units论证的含义。从文档中,

  

单位一个字符串,指定num的单位类型   是指。

其中num是第一个参数。所以

duration(i1)

相当于

duration(i1, units = "seconds")

然而,

duration(i1, units = "days")

表示在i1中衡量days;因此数量非常大。

答案 1 :(得分:9)

According to the maintainer

  

[对duration对象使用interval}应该被禁止。转换时请使用as.duration

此外,上述代码中的错误现在通过禁用函数调用来修复:

> duration(i1)
Error in .duration_from_num(num, units) :
  First argument to `duration` constructor must be character or numeric. Supplied object of class 'Interval'
> as.duration(i1)
[1] "31536000s (~52.14 weeks)"