2013-07-17 1 views
5

Ich benutze Github Abschlag meine Datenanalyse mit R. zu dokumentieren Wenn ich ein Grundstück verwende ich machen:Wie kann ich mehr als ein Dateiformat pro Handlungscode in R erzeugen?

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

auf die Handlung als JPEG zu speichern, die in dem Dokument Abschlag wie dies eingebettet und angezeigt werden können, dann:

!(file_name.jpg) 

ich brauche aber auch eine pdf des Grundstücks für die endgültige Veröffentlichung zu machen. Momentan schreibe ich den gesamten Handlungscode nochmal mit pdf("file_name.pdf"), aber das führt zu einer Menge im Grunde doppeltem Code.

Ich habe versucht, die jpeg und pdf Anrufe in Folge zu setzen, aber dann nur die untere wird produziert.

Gibt es eine Möglichkeit, die Datei jpeg und pdf aus dem gleichen Code während nur einer Ausführung des Codes zu machen?

+0

Wenn Sie 'ggplot' verwenden möchten, können Sie ein Plot speichern und es mit' print' aufrufen. 'GG <- ggplot (...); print (GG) ' –

+2

Übrigens ist es generell (wenn auch nicht immer) besser,' png() 'als' jpeg() 'für Bitmap-Versionen von statistischen Grafiken zu verwenden, es sei denn, Sie haben fotorealistische Bilder ... –

+0

@BenBolker danke für den Tipp. Ich benutzte nur die 'jpegs', um in Github zu sehen, aber die 'png'-Bilder sehen schöner aus. – KennyPeanuts

Antwort

5

Oder Sie verwenden dev.copy:

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

Warum nicht knitr verwenden? zum Beispiel:

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

Dies wird drei Versionen/Dateien des gleichen Grundstück erstellen:

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

@ Agstudys Antwort ist schlau. Die kanonische Antwort, glaube ich, ist, dass, wenn Sie eine Menge von doppeltem Code haben, können Sie eine wenig Nutzenfunktion zu machen und sie zweimal ausführen:

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

Sie könnten sogar abstrakt diese weiter:

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

... mit ein wenig mehr Einfallsreichtum könnte man replizieren, was knitr bereits tut ...

Verwandte Themen