このようなPOSIXオブジェクトの振る舞いは私を困惑させます。私は、同じ日付と時刻を持つ2つのPOSIX日付時刻ベクトル、1つのPOSIXctと他のPOSIXltを作成します。それらは==
によって同一であるが、以下に示すように%in%
ではない。POSIX日付時刻の奇妙な動作
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と思われます。おそらく '=='は何らかの暗黙の強制を行っています。 – joran
'attributes(d1)'と 'attributes(d3)'を見てください。 'POSIXlt'クラスは、ベクトルと比べてリストと共通しています。実際、私の理解はPOSIXltの 'l 'が表すものですが、' POSIXct'の 'c'はベクトルを作る' c'関数への参照です。 (もっと技術的な説明があると確信しています) – Benjamin
代わりに 'lubridate'を調べるかもしれません。これは、多くの日付/時刻オブジェクトを一貫させます。 – gregmacfarlane