首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >持续时间{lubridate}:持续时间可以为负吗?

持续时间{lubridate}:持续时间可以为负吗?
EN

Stack Overflow用户
提问于 2018-06-02 07:54:46
回答 2查看 366关注 0票数 4

我读过的所有文档似乎都表明,在lubridate 1.7.4中,持续时间可能是负的,包括R文档提供的示例:

代码语言:javascript
复制
> duration(-1, "days")
> duration(day = -1)

This one bugfix back in 2009说的与示例输出类似:

代码语言:javascript
复制
> new_duration(secs = -1, mins = -1, hours = -1)
[1] "-1 hours, -1 minutes and -1 seconds"

但是当我运行duration(-1, "days")时,R返回:

代码语言:javascript
复制
[1] "86400s (~1 days)"

怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-02 08:39:22

是的,它们可能是负面的。从源代码可以看出,这是Duration类的print方法的工件。检查对象会发现,尽管没有显示为负数,但它仍然是负数,并且表现为负数,如下所示。

我认为罪魁祸首是source code here的102行。format.Duration函数在打印Duration时调用abs。我猜这是有意为之的行为,尽管你必须与开发人员进行推理(可能是因为人们倾向于将持续时间理解为积极的)。

代码语言:javascript
复制
library(lubridate)
neg <- duration(-1)
pos <- duration(2)
neg + pos
#> [1] "1s"
unclass(neg)
#> [1] -1

reprex package创建于2018-06-01 (v0.2.0)。

票数 4
EN

Stack Overflow用户

发布于 2018-06-02 08:39:00

我想当你打印它的时候还是有一个问题,但当负片时持续时间工作得很好:

代码语言:javascript
复制
date <- mdy("7/8/17")
date - duration(10, "days")
# [1] "2017-06-28"
date + duration(-10, "days)
# [1] "2017-06-28"

duration是一个带有.Data插槽的类,其中包含以秒为单位的持续时间,您可以检查以确认它确实是负的:

代码语言:javascript
复制
duration(-10, "days")@.Data
# [1] -864000
duration(-10, "days")@.Data / 3600 / 24 # to get the days:
# [1] -10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50652262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档