4

このPOSIXct日付のリストを検討してください。

times <- list(as.POSIXct(c("2012-07-26 00:30", "2012-07-26 6:20",
                           "2012-07-26 10:40", "2012-07-26 15:50")),
              as.POSIXct(c("2012-07-26 01:15", "2012-07-26 10:10",
                           "2012-07-26 15:15", "2012-07-26 18:50")),
              as.POSIXct(c("2012-07-26 00:35", "2012-07-26 15:05", 
                           "2012-07-26 19:36", "2012-07-26 22:32")),
              as.POSIXct(c("2012-07-26 03:34", "2012-07-26 16:43", 
                           "2012-07-26 21:44", "2012-07-26 23:45")))

私が行った場合:

range(times[[1]])

私は正しく得ます:

[1] "2012-07-26 00:30:00 CEST" "2012-07-26 15:50:00 CEST"

さて、私がそうするなら:

range(times[c(1,3)])

何らかの理由で、RはPOSIXctオブジェクトをタイムスタンプに変換することを決定し、私に

[1] 1343255400 1343334720

次に、次のようにして、それらをPOSIXctに再変換しようとします。

as.POSIXct(range(times[c(1,3)]), origin="1970-01-01 00:00")

そして、奇妙なことに、私は1時間前に範囲を取得します。

[1] "2012-07-25 23:30:00 CEST" "2012-07-26 21:32:00 CEST"

だから私はしなければなりません:

as.POSIXct(range(times[c(1,3)]), origin="1970-01-01 01:00")

正しい範囲を取得するには:

[1] "2012-07-26 00:30:00 CEST" "2012-07-26 22:32:00 CEST"

私は何かが足りないのですか、それともどこかにバグがありますか?

4

2 に答える 2

4

times[[1]]はベクトル、times[c(1,3)]はリストです。呼び出す前に後者をベクトルに変換すれば、rangeすべてうまくいきます。

unlistただし、アトミックベクトルのみを返すため(range内部でそのようなことを行う必要があります)、使用する必要はありませんが、次を使用できますdo.call

range(do.call(c,times[c(1,3)]))

使用による違いはas.POSIXct、タイムゾーンの問題が原因である可能性があります。

于 2012-07-26T14:17:00.027 に答える
2

ジョシュアが言ったように、時間はタイムゾーンのためです。たとえば、次のことを試してください。

times <- list(as.POSIXct(c("2012-07-26 00:30", "2012-07-26 6:20",
                       "2012-07-26 10:40", "2012-07-26 15:50"), "GMT"),
          as.POSIXct(c("2012-07-26 01:15", "2012-07-26 10:10",
                       "2012-07-26 15:15", "2012-07-26 18:50"), "GMT"),
          as.POSIXct(c("2012-07-26 00:35", "2012-07-26 15:05", 
                       "2012-07-26 19:36", "2012-07-26 22:32"), "GMT"),
          as.POSIXct(c("2012-07-26 03:34", "2012-07-26 16:43", 
                       "2012-07-26 21:44", "2012-07-26 23:45"), "GMT"))
as.POSIXct(range(times[c(1,3)]), origin="1970-01-01 00:00", "GMT")
于 2012-07-26T14:24:28.930 に答える