Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:lubridate返回NA–;意外地_R_Lubridate - Fatal编程技术网

R:lubridate返回NA–;意外地

R:lubridate返回NA–;意外地,r,lubridate,R,Lubridate,我发现lubridate有一种意想不到的行为。 以下R代码返回NAs而不是“2010-10-17 08:00:00”: library(lubridate); as.POSIXct("2010-10-17 07:59:01") + seconds(59); as.POSIXct("2010-10-17 07:59:30") + seconds(30); 鉴于以下代码段返回预期值('2010-10-17 07:59:00'): 这是lubridate中的一个bug还是我必须更彻底地RTFM?!:

我发现lubridate有一种意想不到的行为。 以下R代码返回NAs而不是“2010-10-17 08:00:00”:

library(lubridate);
as.POSIXct("2010-10-17 07:59:01") + seconds(59);
as.POSIXct("2010-10-17 07:59:30") + seconds(30);
鉴于以下代码段返回预期值('2010-10-17 07:59:00'):

这是lubridate中的一个bug还是我必须更彻底地RTFM?!:)

更新:使用的软件:Gnu R v 3.0.2,lubridate 1.3.3

更新2:使用数据秒而不是秒解决了此问题

通过以下公式计算正确的结果:

as.POSIXct("2010-10-17 07:58:01") + dseconds(59);
as.POSIXct("2010-10-17 07:58:30") + dseconds(30);
最终编辑:已知错误:

我发现了这个bug,因为它是这样的:显然,
POSIXct
-类对象将允许您修改它的
seconds
部分,但是没有“carry”函数,因此如果您强制总秒数超过59,它将放弃

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

看起来可能是时区和/或夏令时问题。您创建了什么类的
“2010-10-17 07:59:01”
(作为检查)?@Joshua:谢谢。但是你可以将月份更改为任何有效值,行为保持不变…@RScriv:我不明白你的问题。这只是一根弦…@CarlWitthoft:我试过以下方法:ymd_hms(“2010-01-17 07:59:01”)+秒(59);它还返回NA.:/不确定这是否是原因,但软件包说明中说,如果您愿意,它允许几分之一秒的时间。在这里通读这篇文章,似乎
lubridate::seconds
是一个句点,这篇文章暗示它是故意的,但
lubridate::dseconds
被视为一个持续时间,这在设计上是精确的,所以当试图给滚动对象添加不精确的时间时,可能是因为不精确?文件不清楚,但要记住这一点。
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
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"