web-dev-qa-db-fra.com

Une longueur d'objet plus longue n'est pas un multiple d'une longueur d'objet plus courte?

Je ne comprends pas pourquoi R me donne un avertissement sur "La longueur d'objet plus longue n'est pas un multiple de la longueur d'objet plus courte"

J'ai cet objet qui est généré en faisant un agrégat sur une série xts donnant la médiane du jour de la semaine:

u <- aggregate(d, list(Ukedag = format(index(d),"%w")), median)

1 314.0
2 282.5
3 270.0
4 267.0
5 240.5

Ensuite, j'essaie d'appliquer cela à ma série xts d'origine, qui ressemble à ceci (seulement beaucoup plus longtemps)

head(d)
2009-01-02 116
2009-01-05 256
2009-01-06 286

En utilisant:

coredata(d) <- coredat(d) - u[format(index(d),"%w")];

Ce qui entraîne un avertissement.

L'intention est de soustraire la moyenne du jour de la semaine. Il semble fonctionner malgré l'avertissement, mais de quoi dois-je m'inquiéter?

Solution révisée: tentative 2

apply.daily(d, function(x) coredata(x) - u[format(index(x), "%w")] )

J'ai effectivement eu une grave erreur. Cela ne donne aucun avertissement et je l'ai testé en faisant:

apply.daily(d, function(x) u[format(index(x), "%w")] )

Puis en vérifiant certaines dates, et il est apparu que c'était aligné avec le calendrier.

13
tovare

Oui, c'est quelque chose dont vous devez vous inquiéter. Vérifiez la longueur de vos objets avec nrow (). R peut répliquer automatiquement les objets afin qu'ils soient de la même longueur s'ils diffèrent, ce qui signifie que vous pouvez effectuer des opérations sur des données incompatibles.

Dans ce cas, vous avez une faille évidente dans le fait que vous soustrayez les données agrégées des données brutes. Ceux-ci seront certainement de longueurs différentes. Je vous suggère de les fusionner en séries chronologiques (en utilisant les dates), puis locf (), puis de faire votre soustraction. Sinon, fusionnez-les en tronquant les dates d'origine au même intervalle que la série agrégée. Faites très attention à ne pas laisser tomber d'observations.

Enfin, quelques conseils généraux pour commencer: regardez le résultat de vos calculs pour voir s'ils ont du sens. Vous pouvez même les extraire dans une feuille de calcul et reproduire les résultats.

14
Shane