2013-07-17 26 views
5

tôi sử dụng Github markdown tài liệu phân tích dữ liệu của tôi với R. Khi tôi thực hiện một âm mưu tôi sử dụng:Làm cách nào tôi có thể tạo nhiều định dạng tệp cho mỗi mã lô trong R?

jpeg("file_name.jpg") 
plot(...) 
dev.off() 

để lưu cốt truyện như một jpeg mà sau đó có thể được nhúng và hiển thị trong tài liệu markdown như thế này:

!(file_name.jpg) 

Tuy nhiên, tôi cũng cần phải thực hiện pdf của ô để xuất bản lần cuối. Hiện tại tôi viết toàn bộ mã cốt truyện lại với pdf("file_name.pdf") nhưng điều này dẫn đến rất nhiều mã trùng lặp về cơ bản.

Tôi đã thử đặt các cuộc gọi jpegpdf theo thứ tự nhưng sau đó chỉ cuộc gọi được thực hiện.

Có cách nào để tạo tệp jpegpdf từ cùng một mã trong chỉ một lần chạy mã không?

+0

Nếu bạn sẵn sàng sử dụng 'ggplot', bạn có thể lưu một âm mưu và gọi nó bằng cách sử dụng' print'. 'GG <- ggplot (...); in (GG) ' –

+2

bằng cách này, nói chung (mặc dù không phải luôn luôn) tốt hơn để sử dụng' png() 'thay vì' jpeg() 'cho các phiên bản bitmap của đồ họa thống kê, trừ khi bạn có hình ảnh giống như hình ảnh ... –

+0

@BenBolker cảm ơn cho tip. Tôi chỉ sử dụng 'jpegs' để tôi xem trong Github nhưng hình ảnh' png' trông đẹp hơn. – KennyPeanuts

Trả lời

5

Hoặc bạn có thể sử dụng dev.copy:

plot(cars) 
dev.copy(jpeg, "cars.jpeg") 
dev.off() 
dev.copy(pdf, "cars.pdf") 
dev.off() 
3

Tại sao không sử dụng knitr? ví dụ:

```{r myplot,fig.width=7, fig.height=6,dev=c('png','pdf','jpeg')} 
plot(cars) 
``` 

Điều này sẽ tạo ra 3 phiên bản/file của cùng một cốt truyện:

  1. myplot.png
  2. myplot.jpeg
  3. myplot.pdf
3

@ câu trả lời của agstudy là thông minh. Câu trả lời kinh điển, tôi nghĩ, là nếu bạn có rất nhiều mã trùng lặp bạn có thể làm cho một chức năng tiện ích nhỏ và chạy nó hai lần:

tmpplotfun <- function() { ... lots of plot code ... } 
pdf(...) 
tmpplotfun() 
dev.off() 
jpeg(...) 
tmpplotfun() 
dev.off() 

Bạn có thể thậm chí trừu tượng này hơn nữa:

plot_twice <- function(plotfun,...) { 
    pdf(...) 
    plotfun() 
    dev.off() 
    jpeg(...) 
    plotfun() 
    dev.off() 
} 
plot_twice(tmpplotfun) 

... với một chút khéo léo hơn bạn có thể sao chép những gì knitr đã được làm ...