2009-12-14 2 views
0

Je veux rbind.zoo deux objet de zoo ensemble. Lorsque je testais, je suis tombé sur le problème suivant (?) ...rbind.zoo ne semble pas créer objet zoo cohérente

Note: Le tableau ci-dessous est un exemple, il n'y a clairement aucun intérêt à cela à part d'être illustratif. J'ai un objet zoo, appelez-le, 'X'. Je veux le casser en deux parties et ensuite les rassembler. Quand je le compare à l'objet d'origine alors all.equal donne des différences.

Il semble que l'attribut '$ class' diffère, mais je ne vois pas comment ni pourquoi. Est-ce que je fais ces objets xts alors le all.equal fonctionne comme prévu.

-à-dire .....

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 me donne la différence suivante:

« Attributs: < Composante 3: Attributs: < Longueur non-concordance : comparaison sur les 1 premiers composants>> "

Répondre

1

Oui, vous avez peut-être trouvé un bogue en termes de gestion des attributs. D'un autre côté, qui s'en soucie? c et d sont effectivement égaux:

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> 

les objets donne Inspecter rien en mourant,

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" 

Je vous suggère d'envoyer un courrier poli aux mainteneurs de zoo illustrant le cas.

+0

Merci pour le commentaire Dirk. J'essayais de travailler si je devais m'en soucier ou non. Je suppose que je vais le transmettre aux responsables et continuer à faire ce que je fais. – olaf

4

R ne traite pas l'attribut tzone des objets POSIXct de manière cohérente. zoo n'a rien à voir avec ça. Vous pouvez trouver des exemples comme celui-ci, même sans utiliser de zoo du tout. c et d dans le code original sont effectivement égaux à l'exception de l'attribut tzone.

Si vous supprimez l'attribut tzone alors c et d seront égaux:

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

Dans le cas du zoo car il supporte à peu près toutes les classes de temps, vous pouvez envisager d'utiliser une classe de temps différente si vous ne besoin de fuseaux horaires. Les fuseaux horaires compliquent les choses sans raison valable si vous n'en avez pas besoin. Dans l'exemple ici, nous aurions pu utiliser la classe Date, par exemple.

Lisez R News 4/1 pour en savoir plus.

Questions connexes