2011-02-01 6 views
1

多くのプロットを生成してpng/jpeg/epsデバイスに書き込むときに、メモリの問題があります。Rのヒープ解析(多くのプロットをpng/jpegに書き込む問題を解決するために必要です)

require(ggplot2) 
... 

render <- function(x) { 
    fileName=paste(chartDir, "/", x$PACKED[1], ".png", sep="") 
    x <- x[,c("EFF_DATE", "variable", "value")] 
    png(fileName, width=1920, height=1000, units="px") 
    print(qplot(EFF_DATE, value, data = x, facets = variable ~ ., geom="line")) 
    dev.off()  
} 

d_ply(molten, "PACKED", render, .progress="tk") 

コードは、最初〜80個のプロットのためにうまく進行した後、非常に短い時間内にRAMの100%を消費し、その後フォーク爆弾のように振る舞います。私はqplotに提供されたxのサイズを確認しました。それらはすべてほぼ同じです。したがって、データではありません。 png行にコメントするときにコードがうまく動作します。 ggplot2ライブラリからggsaveを使用しようとすると、同じ問題が発生します。

なぜこのようなことが起こっているのか誰かが気付いていたら、私はそれを聞いてみたいです。しかし、誰もいないことを予期して、メモリ内のどこを調べて飛行機でクリーンアップすることができるのかを調べるために、Rの中で実行できる素敵なヒープ解析ツールがあるかどうか教えてもらえますか?バイナリのデバッグに頼る必要はありません。

最高の願い、 グラハム。

+0

Argh! - 謝罪します。それは、pngを爆破させる特定のdata.frameのように見えます。さらに調査し、うまくいけば、このスレッドをより有用なもので完成させます。 –

+0

問題は見つかったようですが、ggplot2を使っているので、 'png()'の代わりに 'ggsave()'を試してみることができます。 – Seth

答えて

0

メモリが不足しているかのように、ディスクにスワップしているようです。

gc()関数を使用して強制的にガベージコレクションを行うことができます。これはオプションのverboseパラメータをとります。 dev.off()の後に追加して、役立つかどうか確認してください。

ジェフリー

+0

'[r] gc'を検索すると、http://stackoverflow.com/questions/1467201/forcing-garbage-collection-to-run-in-r-with-the-gc-commandのような関連する回答が見つかります –

1

[OK]を、これは私が最初に思ったようPNG/JPEG/EPSに(バグやパイロット・エラー)とないレンダリングをqplotする私のコールに問題があるかのように見えます。私は「ものの、

require(ggplot2) 
    df_import <- read.table("bad.data", colClasses=c("integer", "POSIXct","factor","integer"), header = TRUE) 
    qplot(EFF_DATE, value, data = df_import) 



     EFF_DATE variable value 
147170 2010-07-05 COUNT_0  0 
147254 2010-07-06 COUNT_0  0 
147338 2010-07-07 COUNT_0  0 
147422 2010-07-08 COUNT_0  0 
147506 2010-07-09 COUNT_0  0 
147590 2010-07-12 COUNT_0  0 
147674 2010-07-13 COUNT_0  0 
147758 2010-07-15 COUNT_0  0 
147842 2010-07-16 COUNT_0  0 
147926 2010-07-19 COUNT_0  0 
148010 2010-07-20 COUNT_0  0 
148094 2010-07-21 COUNT_0  0 
148178 2010-07-22 COUNT_0  0 
148262 2010-07-23 COUNT_0  0 
148346 2010-07-26 COUNT_0  0 
148430 2010-07-28 COUNT_0  0 
148514 2010-07-29 COUNT_0  0 
148598 2010-07-30 COUNT_0  0 
148682 2010-08-02 COUNT_0  0 
148766 2010-08-03 COUNT_0  0 
148850 2010-08-04 COUNT_0  0 
148934 2010-08-05 COUNT_0  0 
149018 2010-08-06 COUNT_0  0 
149102 2010-08-09 COUNT_0  0 
149186 2010-08-10 COUNT_0  0 
149271 2010-08-11 COUNT_0  0 
149356 2010-08-12 COUNT_0  0 
149439 2010-08-13 COUNT_0  0 
149521 2010-08-16 COUNT_0  0 
149601 2010-08-17 COUNT_0  0 
149681 2010-08-18 COUNT_0  0 
149761 2010-08-19 COUNT_0  0 
149843 2010-08-20 COUNT_0  0 
149925 2010-08-23 COUNT_0  0 
150004 2010-08-24 COUNT_0  0 
150084 2010-08-25 COUNT_0  0 
150164 2010-08-26 COUNT_0  0 
150245 2010-08-27 COUNT_0  0 
150326 2010-08-30 COUNT_0  0 
150407 2010-08-31 COUNT_0  0 

私のアーキテクチャは、Linux x86_64である:

は、最初に「bad.data」と呼ばれるファイルに下部に記載されているテーブルをコピーして、Rのプロンプトに次のように入力し、再現するために、これが問題に関連しているかどうかはわかりません。

関連する問題