csv(コンマ区切り値)から読み取ったいくつかのデータベースを操作する必要がありread.table
、変数のタイプごとに割り当てられたメモリのサイズを計算する方法を知りたいです。
どうやってするの ?
編集-言い換えると、.csv
ファイルから読み取られた一般的なデータフレームにRが割り当てるメモリの量はどれくらいですか?
csv(コンマ区切り値)から読み取ったいくつかのデータベースを操作する必要がありread.table
、変数のタイプごとに割り当てられたメモリのサイズを計算する方法を知りたいです。
どうやってするの ?
編集-言い換えると、.csv
ファイルから読み取られた一般的なデータフレームにRが割り当てるメモリの量はどれくらいですか?
オブジェクトに割り当てられたメモリの量は、で取得できますobject.size
。例えば:
x = 1:1000
object.size(x)
# 4040 bytes
このスクリプトも役立つ場合があります。現在のすべてのオブジェクトで使用されているメモリの量を表示またはグラフ化できます。
なぜ48バイトなのかという質問に答えるとobject.size(4)
、その理由は、各数値ベクトルにいくらかのオーバーヘッドがあるためです。(ではR
、4
数値は他の言語のように単なる整数ではなく、長さ1の数値ベクトルです)。ただし、ベクトルのサイズに応じてオーバーヘッドが増加しないため、パフォーマンスが低下することはありません。試してみると:
> object.size(1:100000) / 100000
4.0004 bytes
これは、各整数自体が4バイトしか必要としないことを示しています(予想どおり)。
したがって、要約:
長さの数値ベクトルのn
場合、バイト単位のサイズは通常40 + 8 * floor(n / 2)
。です。ただし、私のバージョンのRとOSでは、わずかな不連続性が1つあり、予想よりも168バイト速くジャンプします(下のプロットを参照)。それを超えると、長さ10000000のベクトルまで、線形関係が成り立ちます。
plot(sapply(1:50, function(n) object.size(1:n)))
カテゴリ変数の場合、オーバーヘッドが少し増えますが、非常によく似た線形傾向が見られます(以下を参照)。いくつかのわずかな不連続性を除けば、関係はに非常に近い400 + 60 * n
です。
plot(sapply(1:100, function(n) object.size(factor(1:n))))