2013-07-17 4 views
5

używam GitHub przecen udokumentować moją analizę danych z R. Kiedy robię działkę używać:Jak mogę wytworzyć więcej niż jeden format pliku na kod wydruku w R?

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

aby zapisać wykres w formacie JPEG, które mogą być następnie osadzony i wyświetlane w dokumencie wyprzedaży tak:

!(file_name.jpg) 

jednak również trzeba dokonać pdf działki o ostatecznej publikacji. Obecnie zapisuję cały kod fabuły ponownie za pomocą pdf("file_name.pdf"), ale powoduje to wiele w zasadzie duplikatu kodu.

Próbowałem po kolei wywoływać połączenia jpeg i pdf, ale wtedy tylko dolny został wygenerowany.

Czy istnieje sposób utworzenia pliku jpeg i pdf z tego samego kodu podczas tylko jednego uruchomienia kodu?

+0

Jeśli chcesz użyć 'ggplot', możesz zapisać działkę i wywołać ją za pomocą' print'. 'GG <- ggplot (...); print (GG) ' –

+2

przy okazji, to ogólnie (ale nie zawsze) lepiej używać' png() 'niż' jpeg() 'do bitmapowych wersji statystycznych grafik, chyba że masz obrazy podobne do zdjęć ... –

+0

@BenBolker dzięki za cynk. Używałem 'jpegs' do oglądania w Github, ale obrazy' png' wyglądają ładniej. – KennyPeanuts

Odpowiedz

5

Albo można użyć dev.copy:

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

Dlaczego nie używać knitr? na przykład:

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

Spowoduje to utworzenie 3/Wersje plików o tej samej działki:

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

@ Odpowiedź agstudy jest sprytna. Odpowiedź kanoniczne, jak sądzę, jest to, że jeśli masz dużo duplikatu kodu można zrobić trochę funkcję użytkową i uruchomić go dwukrotnie:

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

można nawet abstrakcyjne to dalej:

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

... trochę więcej pomysłowości można replikować co knitr już robi ...

Powiązane problemy