Cuando se almacenan parcelas en un pdf, R genera un archivo temporal (por ejemplo, /tmp/RtmpFKQqjI/pdf317d27df81a0
) para cada parcela. Después de dibujar muchos gráficos en un pdf, mi partición /tmp se queda sin memoria y R deja de funcionar (mi escritorio también se congela).Eliminación de archivos temporales creados por pdf()
pequeño ejemplo de código:
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"
(. Los mismos resultados para pdf(file="Rplots%03d.pdf"); for (i in 1:10) { ... }; dev.off()
)
¿Por qué no eliminar esta R archivos temporales después de llamar dev.off()
?
Como solución añado la siguiente línea después de cada dev.off()
:
unlink(list.files(path=tempdir(), pattern="^pdf.", full.names=TRUE))
¿Hay una mejor manera?
unlink solo libera el espacio si nada tiene el archivo abierto. ¿Estás seguro de que están cerrados? ¿Tienes lsof en tu sistema? – stark
En mi humilde opinión los archivos están cerrados (definitivamente después de llamar a 'dev.off()'). 'lsof | grep "/ tmp/Rtmp */pdf *" 'no devuelve nada (' $? == 1'). La solución de desvinculación funciona (la memoria es gratuita después). – sgibb