2016-11-02 7 views
2

私の同僚は、(メモリの点で)どれだけのオーバーヘッドがR data.frameにあるか興味があります。彼は次の例を使用します:R data.frame memory usage - 特にサブセット化後

n = 1e6 
df = data.frame(v1=rnorm(n), v2 = rnorm(n)) 
object.size(df)-sum(sapply(df, object.size)) # some overhead in the df 

#>696 bytes 

すべてがうまくいいです。さて、このdata.frame

idx = as.logical(rbinom(n, size = 1, prob = 0.99)) 
df0 = df[idx,] 

のランダムなサブセットを任せるので - df0におけるオーバーヘッドはdf右と同じでなければなりませんか?

object.size(df0) - sum(sapply(df0, object.size)) 
#> 3961136 bytes 

Grinch "Wrongo!"を引用してください。

object.size(df0) - sum(sapply(df0, object.size)) - object.size(idx[idx]) 

その後、私はほとんど右である648 bytesを得る:私はこれを変更した場合ので、サブセット変数に関する情報がここに格納されているように私には思えます。しかし、私はこの情報がどこに保存されているのかわかりません。

答えて

1

これは行の名前です。元のdata.frameは暗黙の行名を持っていました。

.row_names_info(df, type = 0) 
#[1]  NA -1000000 

.row_names_info(df0, type = 0) 
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
#[28] 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 45 46 47 48 49 50 51 52 53 54 55 56 
#[55] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 
#<snip> 

object.size(.row_names_info(df0, type = 0)) 
#3960008 bytes 
関連する問題