2012-07-15 38 views
5

Khi lưu trữ các ô trong bản pdf R tạo tệp tạm thời (ví dụ: /tmp/RtmpFKQqjI/pdf317d27df81a0) cho mỗi ô. Sau khi vẽ nhiều ô vào một pdf, phân vùng /tmp hết bộ nhớ và R ngừng hoạt động (máy tính của tôi cũng bị đóng băng).Xóa các tệp tạm thời được tạo bởi pdf()

Ít mã ví dụ:

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" 

(. Kết quả tương tự cho pdf(file="Rplots%03d.pdf"); for (i in 1:10) { ... }; dev.off())

Tại sao không R gỡ bỏ những file tạm này sau khi gọi dev.off()?

Là một workaround tôi thêm dòng sau đây sau mỗi dev.off():

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

Có cách nào tốt hơn?

+0

hủy liên kết chỉ giải phóng dung lượng nếu không có tệp nào mở. Bạn có chắc chắn họ đã đóng cửa? Bạn có lsof trên hệ thống của bạn? – stark

+0

IMHO các tập tin được đóng lại (chắc chắn sau khi gọi 'dev.off()'). 'lsof | grep "/ tmp/Rtmp */pdf *" 'không trả về giá trị nào (' $? == 1'). Unlink workaround hoạt động (bộ nhớ là miễn phí sau đó). – sgibb

Trả lời

4

Tôi có xu hướng đồng ý với @stark rằng đây là lỗi nhỏ (nhỏ) trong việc triển khai thiết bị pdf của R.

Một giải pháp thay thế là sử dụng thiết bị cairo_pdf, sản xuất bản pdf giống hệt nhưng không để lại các tệp phụ nằm trong thư mục tạm thời.

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) 
+0

Cảm ơn bạn đã giải quyết thêm. Nó tốt hơn gọi 'hủy liên kết (...)' sau mỗi câu lệnh lô. – sgibb

3

Vì tệp được đóng sau khi dev.off được gọi, đây là lỗi trong thư viện pdf của R. Giải pháp tốt nhất là sửa lỗi. Không có lý do để pdf để lại các tập tin tmp.

+0

Tôi đã viết một báo cáo lỗi: [Bug 14991] (https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=14991) – sgibb

Các vấn đề liên quan