Perché XTS è implementato come matrice anziché come un frame di dati?
Domanda
Ho trovato alcune informazioni sulla rappresentazione dei campi XTS questo Discussione ma non sono ancora chiaro perché XTS sia un indice + una matrice. Perché non un indice + un frame di dati? Ciò non consentirebbe una maggiore flessibilità quando si lavora con fattori e colonne numeriche?
Una volta caricato i dati in XTS, la maggior parte del lavoro consiste nell'esecuzione di operazioni numeriche su un set completo o un sottoinsieme delle serie temporali. Per questo l'indicizzazione funziona molto bene, ma sono costretto a effettuare chiamate come data.frame(data.matrix(myxts))
essere in grado di estrarre fattori e colonne numeriche.
Inoltre, trovo più conveniente usare la notazione $ rispetto all'indicizzazione Matrix, sebbene questa sia davvero una domanda diversa. Per esempio:
lm(myxts$Res ~ myxts$ThisVar + myxts$ThatVar)
è più facile da scrivere che
lm(myxts[, "Res"] ~ myxts[, "ThisVar"] + myxts[, "ThatVar"]).
Soluzione
XTS utilizza la matrice anziché data.rame perché:
- È una sottoclasse di zoo, ed è così che gli oggetti dello zoo sono strutturati e
- Gli oggetti Matrix hanno prestazioni molto migliori di Data.Frame.
La tua seconda domanda potrebbe essere risolta usando il data=
argomento a lm
o, più in generale, usando with
:
with(myxts, lm(Res ~ ThisVar + ThatVar))