4

長い道のりを遡るオブジェクトを分割しようとすると、奇妙なxtsの動作に気づきました。分割の動作は、エポックで変更されます。

#Create some data
dates <- seq(as.Date("1960-01-01"),as.Date("1980-01-01"),"days")
x <- rnorm(length(dates))
data <- xts(x, order.by=dates)

xtsオブジェクトを週ごとに分割すると、週の最後の日は1970年より前の月曜日として定義されます。1970年以降は、日曜日(予想される動作)として定義されます。

#Split the data, keep the last day of the week
lastdayofweek <- do.call(rbind, lapply(split(data, "weeks"), last))
head(lastdayofweek)
tail(lastdayofweek)

1960年のカレンダー

1979年のカレンダー

これは、数か月または数年ではなく、数週間だけ問題になるようです。

#Split the data, keep the last day of the month
lastdayofmonth <- do.call(rbind, lapply(split(data, "months"), last))
head(lastdayofmonth)
tail(lastdayofmonth)

なぜそれが数週間だけに適用されるのかはわかりませんが、この動作は次のように関係しているようです。xtsクランから。

エポック(1970-01-01)より前の日付の場合、終了時刻は59.0000秒に調整されます。これは、CソースレベルでのasPOSIXctおよびmktime0のR実装のバグ/機能が原因です。これにより、現在のxtsの回避策では、1970年より前の範囲の精度が1分の粒度に制限されます。

私の回避策は、週単位で分割する場合、1970年より前のデータのオブジェクトを分割する前に日付をシフトすることでした。私は他の誰かがより洗練された解決策(またはエラーを回避する方法)を持っていることを期待しています。

編集:質問が何であるかを明確にするために、私はa)これが発生する理由を指定する(エラーの性質をよりよく理解できるため、それを回避できる)および/またはb)最善の回避策を探していますそれに対処する。

4

1 に答える 1

4

1つの「回避策」は、Rev。743以前をチェックアウトすることです。これは、Rev。744で壊れたように見えます。

svn checkout svn://svn.r-forge.r-project.org/svnroot/xts/@743

ただし、古いバージョンを永久に使用する必要がないように、バグレポートを提出することをお勧めします(もちろん、他のバグにパッチが適用されているか、Rev。743以降に新機能が追加されている可能性があります)

于 2013-01-13T15:49:47.293 に答える