rbind.zoo, похоже, не создает согласованный объект зоопарка

Я хочу объединить два объекта зоопарка rbind.zoo. Когда я тестировал, я столкнулся со следующей проблемой (?)...

Примечание. Ниже приведен пример, в нем явно нет смысла, кроме как для иллюстрации. У меня есть объект зоопарка, назовите его «X». Я хочу разбить его на две части, а затем rbind.zoo их вместе. Когда я сравниваю его с исходным объектом, all.equal дает различия.

Похоже, что атрибут «$ class» отличается, но я не понимаю, как и почему. Делаю ли я эти объекты xts, тогда all.equal работает как положено.

i.e. .....

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 компонентов > >"


r zoo
person olaf    schedule 14.12.2009    source источник


Ответы (2)


Да, возможно, вы нашли там ошибку с точки зрения обработки атрибутов. С другой стороны, кого это волнует? c и d фактически равны:

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 с иллюстрацией дела.

person Dirk Eddelbuettel    schedule 14.12.2009
comment
Спасибо за отзыв Дирк. Я пытался понять, стоит ли мне волноваться или нет. Думаю, я передам его сопровождающим и продолжу делать то, что делаю. - person olaf; 14.12.2009

R не обрабатывает атрибут tzone объектов POSIXct последовательно. зоопарк не имеет к этому никакого отношения. Вы можете придумать такие примеры, даже не используя зоопарк. c и d в исходном коде на самом деле равны, за исключением атрибута tzone.

Если вы удалите атрибут tzone, тогда c и d будут равны:

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

В случае зоопарка, поскольку он поддерживает практически любой класс времени, вы можете рассмотреть возможность использования другого класса времени, если вам не нужны часовые пояса. Часовые пояса просто усложняют ситуацию без уважительной причины, если они вам не нужны. В приведенном здесь примере мы могли бы, например, использовать класс Date.

Прочтите R News 4/1, чтобы узнать больше.

person G. Grothendieck    schedule 30.03.2010