rbind.zoo似乎没有创建一致的动物园对象

时间:2009-12-14 03:54:15

标签: r zoo

我想将rbind.zoo两个动物园对象放在一起。当我测试时,我遇到了以下问题(?)......

注意:下面是一个例子,除了说明之外,显然没有任何意义。 我有一个动物园对象,称之为'X'。我想把它分成两部分,然后将它们rbind.zoo放在一起。当我将它与原始对象进行比较时,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给了我以下区别:

“属性:&lt;组件3:属性:&lt;长度不匹配:前1个组件的比较&gt;&gt;”

2 个答案:

答案 0 :(得分:4)

R不会一致地处理POSIXct对象的tzone属性。动物园与此无关。即使不使用动物园,你也可以提出这样的例子。除了tzone属性外,原始代码中的c和d实际上是相等的。

如果删除tzone属性,则c和d将相等:

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

在动物园的情况下,因为它支持几乎任何时间类,如果你不需要时区,你可以考虑使用不同的时间类。如果你不需要它们,时区就会使事情变得复杂。在这里的示例中,我们可以使用Date类,例如。

阅读R News 4/1了解更多信息。

答案 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的维护人员发送礼貌邮件,说明案例。