2011-12-15 13 views
20

Analizzo le misure da molte città (centinaia) e devo creare rapporti separati per città (in formato Adobe PDF).Can Sweave produce molti file pdf automaticamente?

Il mio processo è simile a questo:

  1. Prima RStudio per preparare i dati per essere mostrati, salvati in X.Rda.
  2. In X.Rnw (RStudio) leggo X.Rda, seleziono una città e produco tabelle e grafici.
  3. In RStudio premo "Compila PDF" e viene prodotto il rapporto città X.pdf.
  4. Vado al passaggio 2, scelgo un'altra città e così via.

Questo è molto noioso e sembra perfetto per un ciclo per città, ma come può essere fatto?

Grazie contributori!

/Chris

+4

Questo può essere fatto con una combinazione di' brew' e 'sweave'. Dai un'occhiata a questo esempio qui http://stackoverflow.com/questions/8434371/run-sweave-or-knitr-with-objects-from-existing-r-session/8437769#8437769. puoi scrivere una funzione che legge un 'city' e compila doc in pdf e scorrere le città – Ramnath

+2

Hai bisogno di espanderlo un po 'Come fa il tuo .Rnw selezionare una città? Quale sistema operativo stai usando (perché questo può essere facilmente script in Linux)? Oppure puoi usare la funzione Sweave (file) in R, ma dobbiamo sapere come rendere il .Rnw utilizzare un insieme specifico di dati. Potrebbe essere necessario utilizzare "brew" per creare uno specifico .Rnw da un modello. E poi il passo successivo è rendere il PDF -? Sweave suggerisce texi2dvi dal pacchetto di strumenti ... – Spacedman

risposta

27

Si può usare qualcosa di simile a un ciclo for con un cambio variabile globale, che controlla in quale città si desidera tessere nella relazione; vedere l'altro post Run Sweave or knitr with objects from existing R session

Il codice sarà come (supponiamo cities è un vettore di carattere, e io uso il pacchetto knitr come esempio perché è possibile specificare il nome del file di output):

for (city in cities) { 
    knit('city_template.Rnw', output = paste('report_', city, '.tex', sep = '')) 
} 

Dentro city_template.Rnw, si dispone di un pezzo come

<<do-my-job>>= 
make_plot(city, ...) 
whatever(city, ...) 
@ 

Poi si aprirà una serie di file tex nominati dalle città, e il resto del tuo lavoro è quello di compilarli in PDF (non è possibile per RStudio a compila più file tex, AFAIK, ma è banale farlo in riga di comando o in R con texi2dvi()).

C'è una cosa che devi fare attenzione: devi usare un prefisso di figura diverso (l'opzione fig.path) per ogni file di output, altrimenti le città diverse possono sovrascrivere l'un l'altro l'output delle figure. In knitr, questo può essere fatto da questo modo:

<<setup, echo=FALSE>>= 
opts_chunk$set(fig.path = paste('my-prefix-', city, sep = '')) 
@ 

credo che questo dovrebbe essere sicuro per la produzione di molti rapporti con un ciclo.

BTW, puoi certamente raggiungere lo stesso obiettivo con Sweave; forse saprai perché ho sviluppato knitr in seguito (questo è fuori tema, quindi non mi espanderò qui).

0
  • Farlo in ambiente R.
  • mettere tutta l'uscita per la città specifica in un elenco
  • Scrivi la RNW con pezzi solo chiamate le uscite
  • salvare l'immagine R nella stessa cartella del rapporto Sweave e impostare WD per questa stessa cartella
  • Sweave ("yourfile.RnW", output = "yourcity.tex ")
  • Usa texi2dvi per compilare il file tex da R

Se si dispone di molte città, si dovrebbe mettere che in una funzione.

Problemi correlati