2012-11-26 3 views
13

私は2.5GBのデータセットを持っていますが、それは私の4GBのメモリにとってかなり大きいものです。文字変数を要素に変換すれば、スペースと処理時間を節約できますか?文字列を要素に変換するとメモリが節約できますか?

私は内部的には、係数はレベルのルックアップテーブルで数値で格納されると思います。しかし、私はそれが実際にどのように機能するかはわかりません。

+0

あなたが要因が保存されている方法についての正しいです。しかし、スペースの削減は、因子レベルの数と変換しようとしている文字列の長さに依存します。また、 'ff'のような大きなデータパッケージのいくつかを見たいかもしれません。 – Justin

+3

ファクタに変換すると、文字がハッシュテーブルに格納されるため、領域が節約されません。 factorに変換すると、処理時間が短縮されます。何をしていても、文字を因数に変換することができれば、それは実際に行っている処理に依存します。 –

+0

明確な説明をくれてありがとう、Joshua。そしてffパッケージを指してくれたJustinに感謝します。 – AdamNYC

答えて

12

文字をハッシュテーブルに格納するため、係数に変換しても領域が節約されません。 See section 1.10 The CHARSXP cacheR Internalsです。

コードを因子に変換する必要がある場合(回帰、分類など)、処理時間を短縮できますが、文字列操作を行うと処理時間が向上しませんファクタを文字に変換し直します。それは本当にあなたがやっていることにかかっています。ディスクにデータを書き込む際に、スペースを節約ん要因としてではなく、文字のベクトルとしてカテゴリのデータを格納

+0

あなたは最初の文を詳しく説明できますか?それとも詳細を提供するリファレンスがありますか? – Dason

+0

@Dason:エラボレーションが追加されました。 :) –

+0

ありがとう!私はそれがそれを実現しませんでしたが、それは知ってうれしいです。 – Dason

6

## Create 2 two-million length vectors, one character and one factor 
animalsChar <- c(rep("giraffe", 1e6), rep("pygmy chimpanzee", 1e6)) 
animalsFac <- factor(animalsChar) 

## Save them to two ".Rdata" files 
charFile <- "char.Rdata" 
facFile <- "fac.Rdata" 
save(animalsChar, file = "char.Rdata") 
save(animalsFac, file = "fac.Rdata") 

## Compare the sizes of the two files 
file.info("char.Rdata", "fac.Rdata")["size"] 
#    size 
# char.Rdata 87390 
# fac.Rdata 7921 


## Clean up 
unlink(c("char.Rdata", "fac.Rdata")) 
+4

RAMのスペースとHDDのスペースが異なります。 'print(object.size(animalsChar)、units =" Mb ")'をチェックしてください。 –

+0

@JoshuaUlrich - 説明をありがとう。最初に 'object.size()'を試してみたところ、その結果は不思議でした。これはまだいくつかの状況で便利になるかもしれないように見えます。 –

関連する問題