5

プロットを pdf に保存する場合、R は/tmp/RtmpFKQqjI/pdf317d27df81a0プロットごとに一時ファイル (例: ) を生成します。多くのプロットを pdf に描画した後、/tmpパーティションがメモリ不足になり、R が動作しなくなります (デスクトップもフリーズします)。

ちょっとしたコード例:

for (i in 1:10) {
    pdf(file=paste(i, ".pdf", sep=""))
    plot(1:10)
    dev.off()
}

list.files(path=tempdir(), pattern="^pdf.", full.names=TRUE)
# [1] "/tmp/RtmpFKQqjI/pdf317d27df81a0" "/tmp/RtmpFKQqjI/pdf317d28ed0612"
# [3] "/tmp/RtmpFKQqjI/pdf317d295c2453" "/tmp/RtmpFKQqjI/pdf317d304bb025"
# [5] "/tmp/RtmpFKQqjI/pdf317d3332d7fe" "/tmp/RtmpFKQqjI/pdf317d3921428f"
# [7] "/tmp/RtmpFKQqjI/pdf317d4cf812ca" "/tmp/RtmpFKQqjI/pdf317d5082bebe"
# [9] "/tmp/RtmpFKQqjI/pdf317d560d326"  "/tmp/RtmpFKQqjI/pdf317d674b25ea"

( についても同じ結果ですpdf(file="Rplots%03d.pdf"); for (i in 1:10) { ... }; dev.off()。)

を呼び出した後、R がこの一時ファイルを削除しないのはなぜdev.off()ですか?

回避策として、各行の後に次の行を追加しますdev.off()

unlink(list.files(path=tempdir(), pattern="^pdf.", full.names=TRUE))

より良い方法はありますか?

4

2 に答える 2

4

pdfこれはRのデバイス実装の(マイナーな)バグであるという@starkに同意する傾向があります。

回避策の 1 つは、代わりにcairo_pdfデバイスを使用することです。これにより、本質的に同一の PDF が生成されますが、一時ディレクトリに余分なファイルが残されることはありません。

for (i in 1:2) {
    cairo_pdf(file=paste(i, ".pdf", sep=""))
    plot(1:10)
    dev.off()
}
list.files(path=tempdir(), pattern="^pdf.", full.names=TRUE)
# character(0)
于 2012-07-15T20:14:14.983 に答える
3

dev.off が呼び出された後にファイルが閉じられるため、これは R の pdf ライブラリのバグです。最善の解決策は、バグを修正することです。pdf が tmp ファイルを残す理由はありません。

于 2012-07-15T16:21:10.583 に答える