jan*_*ane 4 time datetime r lubridate
我读过的每个文档似乎都表明lubridate 1.7.4 中的持续时间可能为负数,包括 R 文档提供的示例:
> duration(-1, "days")
> duration(day = -1)
Run Code Online (Sandbox Code Playgroud)
2009 年的这个 bug 修复与示例输出内容类似:
> new_duration(secs = -1, mins = -1, hours = -1)
[1] "-1 hours, -1 minutes and -1 seconds"
Run Code Online (Sandbox Code Playgroud)
但是当我运行时duration(-1, "days"),R 返回:
[1] "86400s (~1 days)"
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
是的,它们可能是负面的。从源代码的阅读来看,这是该类的 print 方法的产物Duration。检查该对象表明,尽管没有这样显示,但它仍保持负数,并且其行为就像应有的负数一样,如下所示。
我认为罪魁祸首是这里源代码的第102行。该format.Duration函数abs在打印Duration. 我想这是有意的行为,尽管您必须与开发人员讨论其推理(可能是因为人们倾向于将持续时间理解为积极的。)
编辑:2019 年 12 月,打印方法已更改为显示带有前导 - 的负持续时间,因此现在这种情况应该只发生在旧版本的 lubridate 上。
library(lubridate)
neg <- duration(-1)
pos <- duration(2)
neg + pos
#> [1] "1s"
unclass(neg)
#> [1] -1
Run Code Online (Sandbox Code Playgroud)