2009-12-14 56 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了解更多。

相关问题