当在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"
Run Code Online (Sandbox Code Playgroud)
(相同的结果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))
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
我倾向于同意 @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)
Run Code Online (Sandbox Code Playgroud)