删除pdf()创建的临时文件

时间:2012-07-15 13:59:46

标签: r pdf plot

在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()的结果相同。)

为什么在调用dev.off()之后R不删除此临时文件?

作为一种解决方法,我在每个dev.off()之后添加以下行:

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

我倾向于同意@stark这是R pdf设备实现中的(次要)错误。

一种解决方法是使用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)

答案 1 :(得分:3)

由于在调用dev.off后文件被关闭,这是R的pdf库中的一个错误。最好的解决方案是修复错误。 pdf没有理由留下tmp文件。