lubridate中的意外值为.numeric,使用单位为arg的值月份

lubridate中的意外值为.numeric,使用单位为arg的值月份,r,lubridate,R,Lubridate,在lubridate软件包中使用as.numeric和period时,我无法理解使用单位为arg的月份值的结果。 也许是个包 a <- period(years = 1, months = 3, days = 1) as.numeric(a, 'days') as.numeric(a, 'years') as.numeric(a, 'months') 提前感谢这看起来像个bug。我相信这个转换是使用lubridate:::seconds\u to_unit完成的,在lubridate 1

在lubridate软件包中使用as.numeric和period时,我无法理解使用单位为arg的月份值的结果。 也许是个包

a <- period(years = 1, months = 3, days = 1)
as.numeric(a, 'days')
as.numeric(a, 'years')
as.numeric(a, 'months')

提前感谢

这看起来像个bug。我相信这个转换是使用lubridate:::seconds\u to_unit完成的,在lubridate 1.6.0版上看起来是这样的:

> lubridate:::seconds_to_unit
function (secs, unit = "second") 
{
    switch(unit, second = secs, minute = secs/60, hour = secs/3600, 
        day = secs/86400, month = secs/(86400 * 365.25)/12, week = secs/(86400 * 
            7), year = secs/(86400 * 365.25), stop("invalid unit ", 
            unit))
}
<environment: namespace:lubridate>
显然,这里的想法是,
86400*365.25
是每年的秒数,除以
12
得到每月的秒数。但它应该是:

month = secs/((86400 * 365.25)/12)
(请注意附加的括号。)

由于这个错误,您得到的答案比应该的答案小144倍


我相信这也是这个错误的原因:


(这里被描述为给出预期结果的倒数。这只是因为他们碰巧选择了一个12个月的间隔,所以除以144可以得到一个月的1/12。)

是的,你是对的。我把
>作为.numeric(a,“seconds”)/(86400*365.25)/12[1]0.1043948>作为.numeric(a,“seconds”)/(86400*365.25)/12[1]15.03285
。非常感谢。不客气。:)我还刚刚提交了一个lubridate请求,其中包含修复:
month = secs/(86400 * 365.25)/12
month = secs/((86400 * 365.25)/12)