润滑意外的结果

时间:2019-03-12 00:23:59

标签: r

我在lubridate软件包中遇到了意外结果。这是一个简短的示例,用于使用函数time_length计算物理时间的流逝;首先直接,然后间隔。看起来方法使用“秒”单位是相同的,但是使用“月”单位是不同的。有谁知道为什么会这样吗?

作为参考,我正在使用:

R version: 3.5.1
lubridate version: 1.7.4

可复制的示例:

library(lubridate)
## generate two dates to illustrate issue
startDate <- ymd("2015-02-27")
endDate <- ymd("2015-03-02")

## calculate physical passage of time, in seconds
time_length(endDate - startDate, "seconds") # result: 259200
time_length(interval(startDate, endDate), "seconds") # result: 259200
# The methods above match, but...

## calculate physical passage of time, in months
time_length(endDate - startDate, "months") # result: 0.09863014
time_length(interval(startDate, endDate), "months") # result: 0.1071429
# The results no longer match! Why?

1 个答案:

答案 0 :(得分:1)

月份的长度不固定。您正在尝试将259200秒(即3天)转换成几个月

> endDate - startDate
Time difference of 3 days

您的0.09863014为3 /(365/12),试图将任意3天转换为任意月份

> interval(startDate, endDate)
[1] 2015-02-27 UTC--2015-03-02 UTC

您的0.1071429是3/28,试图将从非-年2月开始的3天翻译成几个月