首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: lubridate返回NA -unexpectedly

R: lubridate返回NA -unexpectedly
EN

Stack Overflow用户
提问于 2014-03-04 14:55:22
回答 1查看 1K关注 0票数 2

我发现了一种令人意外的行为。以下R代码返回NAs而不是'2010-10-17 08:00:00':

代码语言:javascript
复制
library(lubridate);
as.POSIXct("2010-10-17 07:59:01") + seconds(59);
as.POSIXct("2010-10-17 07:59:30") + seconds(30);

下面的代码片段返回预期值(‘2010-10-1707:59:00’):

代码语言:javascript
复制
as.POSIXct("2010-10-17 07:58:01") + seconds(59);
as.POSIXct("2010-10-17 07:58:30") + seconds(30);

这是润滑油中的一个bug,还是我只需要更彻底地RTFM?!:)

更新:二手软件: Gnu v3.0.2,lubridate 1.3.3

更新2:使用d秒而不是秒解决了这个问题。

正确的结果是通过以下方法计算的:

代码语言:javascript
复制
as.POSIXct("2010-10-17 07:58:01") + dseconds(59);
as.POSIXct("2010-10-17 07:58:30") + dseconds(30);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 15:16:59

最终编辑:已知错误:https://github.com/hadley/lubridate/issues/188

我发现了这个错误:很明显,POSIXct-class对象将允许您修改它的seconds部分,但是没有“进位”函数,所以如果强制总秒超过59秒,它就放弃了。

代码语言:javascript
复制
Rgames> as.POSIXct("2010-10-17 07:59:30")->dfoo
Rgames> dfoo
[1] "2010-10-17 07:59:30 EDT"

Rgames> second(dfoo)
[1] 30
Rgames> second(dfoo)<-second(dfoo)+10
Rgames> dfoo
[1] "2010-10-17 07:59:40 EDT"
Rgames> second(dfoo)<-second(dfoo)+seconds(10)
Rgames> dfoo
[1] "2010-10-17 07:59:50 EDT"
Rgames> second(dfoo)<-second(dfoo)+seconds(10)
Rgames> dfoo
[1] NA

我不知道lubridate::secondssecond函数的意图是什么,但很明显,这并不是要走的路。

编辑:我一直在玩,和上面的dfoodbar <- as.POSIXct("2010-10-17 07:59:30",tz='GMT')一样。我可以将任意秒添加到dbar w/o问题中。此外,我还使用with_tz来切换dfoodbar的时区,并且不管分配的区域是什么,都可以成功地添加任意秒。这让我想知道修改后的as.POSIXct如何处理默认的tz=''参数!

编辑2:嘿,看:

代码语言:javascript
复制
Rgames> as.POSIXct("2010-10-17 07:59:30")->dfoo
Rgames> dfoo + seconds(55)
[1] "2010-10-17 08:00:25 EDT"
Rgames> dfoo + seconds(30)
[1] NA
Rgames> dfoo + seconds(31)
[1] "2010-10-17 08:00:01 EDT"
Rgames> dfoo + seconds(29)
[1] "2010-10-17 07:59:59 EDT"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22175316

复制
相关文章

相似问题

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