Pourquoi xts est-il implémenté comme une matrice plutôt que comme une trame de données?

StackOverflow https://stackoverflow.com/questions/8862951

  •  28-10-2019
  •  | 
  •  

Question

J'ai trouvé des informations sur la représentation des champs xts dans ce fil mais je ne sais toujours pas pourquoi xts est un index + une matrice.Pourquoi pas un index + une trame de données?Cela ne permettrait-il pas plus de flexibilité lorsque vous travaillez avec des facteurs et des colonnes numériques?

Une fois que j'ai chargé des données dans xts, la plupart du travail consiste à effectuer des opérations numériques sur un ensemble complet ou un sous-ensemble de la série chronologique.Pour cela, l'indexation fonctionne très bien, mais je suis obligé de passer par des appels comme data.frame(data.matrix(myxts)) pour pouvoir extraire des facteurs et des colonnes numériques.

De plus, je trouve plus pratique d'utiliser la notation $ que l'indexation matricielle, bien que ce soit vraiment une question différente.Par exemple:

lm(myxts$Res ~ myxts$ThisVar + myxts$ThatVar)

est plus facile à écrire que

lm(myxts[, "Res"] ~ myxts[, "ThisVar"] + myxts[, "ThatVar"]).
Était-ce utile?

La solution

xts utilise une matrice plutôt que data.frame car:

  1. c'est une sous-classe de zoo, et c'est ainsi que les objets de zoo sont structurés, et
  2. Les objets de matrice ont de bien meilleures performances que les data.frames.

Votre deuxième question pourrait être résolue en utilisant l'argument data= pour lm ou, plus généralement, en utilisant with:

with(myxts, lm(Res ~ ThisVar + ThatVar))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top