我阅读的每个文档似乎都表明lubridate 1.7.4中的持续时间可能为负,包括R文档提供的示例:
> duration(-1, "days")
> duration(day = -1)
This one bugfix back in 2009与示例输出类似:
> new_duration(secs = -1, mins = -1, hours = -1)
[1] "-1 hours, -1 minutes and -1 seconds"
但是当我运行
duration(-1, "days")
时,R返回:[1] "86400s (~1 days)"
这是怎么回事?
最佳答案
是的,它们可能是负面的。通过阅读源代码,这是Duration
类的打印方法的产物。检查对象表明,尽管未显示,它仍然保持负数,并且表现得像负数一样,如下所示。
我认为罪魁祸首是source code here的第102行。 format.Duration
函数在打印abs
时调用Duration
。我想这是预期的行为,尽管您必须与开发人员一起进行推理(可能是因为人们倾向于将持续时间理解为积极的)。
library(lubridate)
neg <- duration(-1)
pos <- duration(2)
neg + pos
#> [1] "1s"
unclass(neg)
#> [1] -1
由reprex package(v0.2.0)创建于2018-06-01。
关于r - 持续时间{lubridate} : Can durations be negative?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50652262/