我阅读的每个文档似乎都表明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/

10-12 17:33