2011-01-26 39 views
20

thể trùng lặp:
Generate multiple graphics from within an R functionKhông thể in ra bảng xếp hạng ggplot pdf

Rất lạ điều xảy ra với tôi: đoạn mã sau thất bại trong việc in tới thiết bị pdf:

outnames <- c("1.pdf", "2.pdf") 
for (n in outnames){ 
    pdf(n) 
    qplot(1:10) 
    dev.off() 
} 

sẽ không in bất kỳ thứ gì vào pdf, mặc dù tệp pdf được tạo. Tuy nhiên,

pdf(outnames[2]) 
qplot(1:10) 
dev.off() 

sẽ hoạt động hoàn hảo. Bất kỳ ý tưởng tại sao? Được sao chép trong R 2.11.1.

Trả lời

33

Rất vui, có mùi như FAQ 7.22 - vì vậy hãy thử print(qplot(1:10)).

+1

Cảm ơn bạn. Tôi ngạc nhiên vì sao đôi khi phản tác dụng^Woften. Tôi phải nói rằng cách tiếp cận 'ggsave' dưới đây có ý nghĩa hơn với tôi. –

8

@Dirk giải thích lý do tại sao điều này xảy ra (tự động in bị tắt), nhưng thay thế để mở thiết bị, tạo cốt truyện trên thiết bị, đóng thiết bị là ggsave(). Ví dụ:

p1 <- qplot(1:10) 
ggsave("p1.pdf", plot = p1) 

hoặc thông qua một vòng lặp:

outnames <- c("1.pdf", "2.pdf") 
for (n in outnames){ 
    p2 <- qplot(1:10) 
    ggsave(n, plot = p2) 
} 

Vào cuối mà chúng tôi có tất cả các lô được tạo ra, chúng tôi yêu cầu.

> list.files(pattern = ".pdf$") 
[1] "1.pdf"     "2.pdf"     
[3] "p1.pdf" 
+1

Thực ra vòng lặp của anh ta hoạt động tốt, bởi vì anh ấy không lập chỉ mục thành 'tên bên ngoài', anh ta chỉ sử dụng giá trị. Đó là cách tôi sẽ làm điều đó quá. –

+0

Cũng phát hiện @Ken đó là sự ngu ngốc của riêng tôi gắn liền với @ Hạnh phúc --- sẽ xóa tiếng ồn! –

+0

@Ken hmm có vẻ như đang ngăn tôi chấp nhận các chỉnh sửa của bạn. và sau đó tôi không thể chỉnh sửa bài đăng ngay bây giờ ... –

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