解釈に関係なく、データをロングフォーマットまたはワイドフォーマットで保存する方が効率的かどうかに興味がありますか? 私はobject.size()
メモリ内のサイズを決定するために使用しましたが、それらに大きな違いはなく (サイズに関しては long の方がわずかに効率的です)、値は推定値にすぎません。
生のサイズに加えて、モデリングで使用するときに操作するという点で、どちらの形式がより効率的かということも考えています。
解釈に関係なく、データをロングフォーマットまたはワイドフォーマットで保存する方が効率的かどうかに興味がありますか? 私はobject.size()
メモリ内のサイズを決定するために使用しましたが、それらに大きな違いはなく (サイズに関しては long の方がわずかに効率的です)、値は推定値にすぎません。
生のサイズに加えて、モデリングで使用するときに操作するという点で、どちらの形式がより効率的かということも考えています。
2 つの異なるmatrix
es のメモリ使用量は同じである必要があります。
> object.size(long <- matrix(seq(10000), nrow = 1000))
40200 bytes
> object.size(square <- matrix(seq(10000), nrow = 100))
40200 bytes
効率の違いは、R を使用する際の非効率性に比べれば小さいので、測定可能でさえあれば、ほとんど考慮する必要はありません。
aは ofのdata.frame
a として実装されるため、状況は a の場合とは大きく異なります。list
vector
> object.size(as.data.frame(long))
41704 bytes
> object.size(as.data.frame(square))
50968 bytes
これの時間効率は、正確に何をしたいかによって異なります。
マトリックスの場合、まったく違いはありません。そのマトリックスの data.frame についても同じことが言えます。マトリックスの形状を変更することは、ディメンション属性を割り当てるだけです...ほとんどの場合。
そのデータを何らかの方法で分類して追加情報を追加する場合、通常はワイドの方がストレージ効率が高くなりますが、ロングの方が一般的に効率的に処理されます。これは、スペース効率が悪いため、長い形式の必須のプロパティではありませんが、一般に、ワイドの列名に複合変数の説明があり、それが分離されて新しい列、またはロングの複数の列が与えられます。したがって、これらの冗長性により、より多くのスペースが必要になります。処理面では、多変量の列指定を持つ幅広い形式よりも、長いデータを集計したり、削除する特定のケースを選択したりする方が簡単です。
データが完全な長方形 (または立方体など) でない場合は、Long が (これら 2 つの中で) 最良の方法でもあります。