在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))
有更好的方法吗?
答案 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文件。