私は2.5GBのデータセットを持っていますが、それは私の4GBのメモリにとってかなり大きいものです。文字変数を要素に変換すれば、スペースと処理時間を節約できますか?文字列を要素に変換するとメモリが節約できますか?
私は内部的には、係数はレベルのルックアップテーブルで数値で格納されると思います。しかし、私はそれが実際にどのように機能するかはわかりません。
私は2.5GBのデータセットを持っていますが、それは私の4GBのメモリにとってかなり大きいものです。文字変数を要素に変換すれば、スペースと処理時間を節約できますか?文字列を要素に変換するとメモリが節約できますか?
私は内部的には、係数はレベルのルックアップテーブルで数値で格納されると思います。しかし、私はそれが実際にどのように機能するかはわかりません。
文字をハッシュテーブルに格納するため、係数に変換しても領域が節約されません。 See section 1.10 The CHARSXP cacheはR Internalsです。
コードを因子に変換する必要がある場合(回帰、分類など)、処理時間を短縮できますが、文字列操作を行うと処理時間が向上しませんファクタを文字に変換し直します。それは本当にあなたがやっていることにかかっています。ディスクにデータを書き込む際に、スペースを節約ん要因としてではなく、文字のベクトルとしてカテゴリのデータを格納
:
## 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"))
RAMのスペースとHDDのスペースが異なります。 'print(object.size(animalsChar)、units =" Mb ")'をチェックしてください。 –
@JoshuaUlrich - 説明をありがとう。最初に 'object.size()'を試してみたところ、その結果は不思議でした。これはまだいくつかの状況で便利になるかもしれないように見えます。 –
あなたが要因が保存されている方法についての正しいです。しかし、スペースの削減は、因子レベルの数と変換しようとしている文字列の長さに依存します。また、 'ff'のような大きなデータパッケージのいくつかを見たいかもしれません。 – Justin
ファクタに変換すると、文字がハッシュテーブルに格納されるため、領域が節約されません。 factorに変換すると、処理時間が短縮されます。何をしていても、文字を因数に変換することができれば、それは実際に行っている処理に依存します。 –
明確な説明をくれてありがとう、Joshua。そしてffパッケージを指してくれたJustinに感謝します。 – AdamNYC