日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

解析結果の保存と読み込み

今日はちょっと手抜きですが、オブジェクトの保存と読み込みです。

Rは物理メモリで仕事をするので、大きいデータを処理しているとメモリがすぐなくなってしまう。
僕は貧乏なので、とくに深刻です。
だから、save関数とload関数にはお世話になりっぱなしです。

  • 基本的な使い方(保存)
> x <- 1:10
> y <- matrix(1:12,ncol=4)
> 
> save(x, file="x.Rdata") # オブジェクトxだけを保存するとき
> save(list=c("x", "y"), file="xy.Rdata") # オブジェクトxとyを保存するとき、listの引数はcharacterです
> save(list=ls(), file="all.Rdata") # ワークスペースのオブジェクトを保存するとき
> # save(list=ls(all=TRUE), file="all.Rdata")でも可

拡張子は無くても、何でもいいんですが、"Rdata"にしておくと呼び出すとき便利と思う。

  • 基本的な使い方(呼び出し)
> load("x.Rdata") # オブジェクトxだけを読み込む
> 
> # ワークスペースの拡張子Rdataを全部読み込みたいとき
> lapply(grep("Rdata$", dir(), value=TRUE), load)
[[1]]
[1] "x" "y"

[[2]]
[1] "x"

[[3]]
[1] "x" "y"
  • for-loopでloop毎に結果を保存する

LOOCVとかしていると、オブジェクトがどんどん増えて、メモリがどんどんなくなって、「あ〜!!!!」ってなります。そんなときに良く使っていた。

> for(i in 1:10){
+  x <- matrix(sample(100,12,re=TRUE),ncol=3)
+  save(x, file=paste(i, "Rdata", sep="."))
+  rm(x) # なくてもいいけど
+  gc(); gc() #なくてもいいけど
+ }

最近は、大規模データを扱えるパッケージが増えているようですねffパッケージとかbigmemoryパッケージとか。
僕は経験が無いのですが、第2回JapanR第10回TokyoWebMiningでも議論されている。

あと、R外でも大規模データのアルゴリズムが注目されてますね。Hadoopとか、Jubatusとか。
Mahoutを繋いで、ガリガリやってみないな〜って、ちょっと憧れます。