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

我倾向于同意@stark 的观点,即这是 Rpdf设备实现中的一个(小)错误。

一种解决方法是改用该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 回答