2012-01-14 4 views
3

thisスレッドでxtsフィールドの表現に関する情報が見つかりましたが、xtsがインデックス+マトリックスである理由はまだ分かりません。なぜインデックス+データフレームではないのですか?ファクタや数値列を使って作業するときの柔軟性を高めることはできませんか?xtsがデータフレームではなく行列として実装されるのはなぜですか?

xtsにデータをロードすると、ほとんどの作業はフルセットまたは時系列のサブセットで数値演算を実行することになります。このためインデックス作成は非常にうまく動作しますが、因子と数値の列を抽出するには、data.frame(data.matrix(myxts))のような呼び出しを余儀なくされます。

さらに、実際には異なる質問ですが、私はマトリックス表記法よりも$表記を使う方が便利です。たとえば:

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

lm(myxts[, "Res"] ~ myxts[, "ThisVar"] + myxts[, "ThatVar"]). 

答えて

6

XTSよりも書くことが容易であるため、data.frameのではなく、行列を使用しています。

  1. は、それが動物園のサブクラスであり、それはどのように動物園のオブジェクトです
  2. の行列オブジェクトは、data.framesよりもはるかに優れたパフォーマンスを示します。

あなたの2番目の質問は、lmdata=引数を使用することによって解決することができたり、より一般的に、withを使用することにより:

with(myxts, lm(Res ~ ThisVar + ThatVar)) 
+0

これは私の質問に答えるが、data.matrix()の呼び出しがどのようにコストがかかります数字を扱う?より良いperfomancesのためにxtsの文字マトリックス対データフレームを使用する目的を敗北させるのではないですか? –

+0

私は頭を傷つけています。行列オブジェクトは名前と次元を除くすべての属性を削除するため、(任意の種類の)行列に要素変数はありません。 Joshuaが作成しているポイントが不足していると思います。xts-objectの周りに 'data.frame'または' data.matrix'をラップする必要はありません。その値を 'lm'に取得するには'または 'lm'にデータ引数として渡されます。 –

+3

また、 'zoo'は強化された' ts'クラス(Rの中核)として設計されています。これは順番に行列に基づいています。動物園のデザインビネットを参照してください:http://cran.r-project.org/web/packages/zoo/vignettes/zoo-design.pdf。動物園は '$'をサポートしていることに注意してください。例えば'ライブラリ(動物園); z < - zoo(cbind(a = 1:3、b = 4:6)); z $ a'となる。ところで、パフォーマンスの違いは、行列とデータフレームの間で非常に重要です。 –

関連する問題