2009-12-14 58 views
0

我想將rbind.zoo兩個動物園對象放在一起。當我測試時遇到以下問題(?)...rbind.zoo似乎沒有創建一致的動物園對象

注:下面是一個例子,除了說明性之外,顯然沒有任何意義。 我有一個動物園對象,稱之爲'X'。我想把它分成兩部分,然後把它們放在一起。當我將它與原始對象進行比較時,all.equal會給出差異。

看起來'$ class'屬性不同,但我看不出如何或爲什麼。我是否按預期製作這些xts對象,然後是all.equal作品。

即.....

X.date <- as.POSIXct(paste("2003-", rep(1:4, 4:1), 
        "-", sample(1:28, 10, replace = TRUE), sep = "")) 

X <- zoo(matrix(rnorm(24), ncol = 2), X.date) 

a <- X[c(1:3), ]  # first 3 elements 

b <- X[c(4:6), ]  # second 3 elements 

c <- rbind.zoo(a, b) # rbind into an object of 6 elements 

d <- X[c(1:6), ]  # all 6 elements 

all.equal(c, d)  # are they equal? 

~~~~

all.equal給了我以下區別:

「屬性:<組件3:屬性:<長度不匹配:比較前1個組件>>「

回答

1

是的,您可能在處理屬性時發現了一個錯誤。另一方面,誰在乎? cd是有效等於:

R> c - d 

2003-01-07 0 0 
2003-01-15 0 0 
2003-01-17 0 0 
2003-01-18 0 0 
2003-02-17 0 0 
2003-02-22 0 0 
R> 

檢查對象給出了沒有泄露任何信息:

R> str(c) 
‘zoo’ series from 2003-01-07 to 2003-02-22 
    Data: num [1:6, 1:2] 0.79 -0.731 1.574 -0.694 0.358 ... 
    Index: POSIXct[1:6], format: "2003-01-07" "2003-01-15" 
     "2003-01-17" "2003-01-18" "2003-02-17" "2003-02-22" 
R> str(d) 
‘zoo’ series from 2003-01-07 to 2003-02-22 
    Data: num [1:6, 1:2] 0.79 -0.731 1.574 -0.694 0.358 ... 
    Index: POSIXct[1:6], format: "2003-01-07" "2003-01-15" 
     "2003-01-17" "2003-01-18" "2003-02-17" "2003-02-22" 

我建議你發送一個禮貌的郵件的zoo說明的情況下,維護者。

+0

感謝您的反饋Dirk。我試圖弄清楚我是否應該在意。我想我會把它傳遞給維護者,並繼續做我正在做的事情。 – olaf 2009-12-14 07:11:44

4

R不一致地對待POSIXct對象的tzone屬性。動物園與此無關。即使沒有使用動物園,你也可以想出這樣的例子。原始代碼中的c和d實際上是相同的,除了tzone屬性。

如果刪除tzone屬性,那麼c和d將會等於:

attr(X.date, "tzone") <- NULL ##### add after defining X.date 

在動物園的情況下,因爲它支持幾乎所有的時間類,如果你不這樣做,你可以考慮使用不同的時間類需要時區。如果你不需要它們的話,時區就會讓事情變得複雜,沒有任何理由。例如,在這裏我們可以使用Date類。

閱讀R新聞4/1瞭解更多。