【发布时间】:2016-09-26 18:11:17
【问题描述】:
POSIX 对象的这种行为让我感到困惑。我制作了两个 POSIX 日期时间向量,一个 POSIXct 和另一个 POSIXlt,它们具有相同的日期和时间。它们与== 相同,但与%in% 不同,如下所示。
d.ch = c("2016-09-26 0:00:00", "2016-09-26 1:00:00", "2016-09-26 2:00:00", "2016-09-26 3:00:00", "2016-09-26 4:00:00")
d1 = strptime(d.ch, format="%Y-%m-%d %H:%M:%S") # POSIXlt
d3 = seq(from=ISOdatetime(2016,9,26,0,0,0),
length.out=5, by="hour") # POSIXct
d1 == d3
[1] TRUE TRUE TRUE TRUE TRUE
但是
d1 %in% d3
[1] FALSE FALSE FALSE FALSE FALSE
为什么?
【问题讨论】:
-
d1似乎是 POSIXlt,而 d3 似乎是 POSIXct。可能==正在做一些隐含的强制。 -
看看
attributes(d1)和attributes(d3)。POSIXlt类与列表的共同点比与向量的共同点要多。事实上,我的理解是 POSIXlt` 中的l所代表的含义,而POSIXct中的c是对用于制作向量的c函数的引用。 (我敢肯定还有更技术性的解释) -
您可以调查
lubridate作为替代方案。它使许多日期/时间对象保持一致。