2011-12-15 12 views
20

Analizo las mediciones de muchas ciudades (cientos) y necesito crear informes separados por ciudad (en formato Adobe PDF).¿Puede Sweave producir muchos archivos PDF automáticamente?

Mi proceso es así:

  1. Primera rstudio para preparar los datos que se muestran, guardado en X.Rda.
  2. En X.Rnw (RStudio) leo X.Rda, selecciono una ciudad, y produzco las tablas y los trazados.
  3. En RStudio, presiono "Compilar PDF" y se genera el informe de ciudad X.pdf.
  4. Voy al paso 2, elijo otra ciudad, y así sucesivamente.

Esto es muy tedioso, y se ve perfecto para un bucle for por ciudad, pero ¿cómo se puede hacer?

Gracias r-contributors!

/Chris

+4

Esto se puede hacer con una combinación de' brew' y 'sweave'. Eche un vistazo a este ejemplo aquí http://stackoverflow.com/questions/8434371/run-sweave-or-knitr-with-objects-from-existing-r-session/8437769#8437769. Alternativamente, usted puede escribir una función que lea una 'ciudad' y compila documentos en pdf, y recorra las ciudades. – Ramnath

+2

Necesito ampliar esto un poco. ¿Cómo selecciona su .Rnw una ciudad? ¿Qué sistema operativo está utilizando (porque esto puede ser fácilmente con guión en Linux) o puede usar la función Sweave (archivo) en R, pero necesitamos saber cómo hacer que el .Rnw use un conjunto específico de datos. Es posible que necesites usar 'brew' para crear un .Rnw específico a partir de una plantilla. Y luego el siguiente paso es hacer que el PDF -? Sweave sugiere texi2dvi desde el paquete de herramientas ... – Spacedman

Respuesta

27

Usted puede usar algo como un bucle for con un cambio de variable global, que controla qué ciudad desea tejer en el informe; ver el otro post Run Sweave or knitr with objects from existing R session

El código será como (supongamos cities es un vector de caracteres, y utilizo el paquete knitr como ejemplo porque se puede especificar el nombre del archivo de la salida):

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

interior city_template.Rnw, que tiene un trozo como

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

a continuación, obtendrá una serie de archivos tex nombrados por las ciudades, y el resto de su trabajo es compilar a PDF (no es posible para rstudio a compila varios archivos tex, AFAIK, pero es trivial hacerlo en línea de comando o en R con texi2dvi()).

Hay una cosa que hay que tener cuidado - usted tiene que utilizar una figura prefijo diferente (la opción fig.path) para cada archivo de salida, de lo contrario diferentes ciudades pueden anular la salida de cada otra figura. En knitr, esto se puede hacer mediante la siguiente manera:

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

Creo que esto debe ser seguro para producir muchos informes con un bucle.

Por cierto, ciertamente puede lograr el mismo objetivo con Sweave; quizás sabrá por qué desarrollé knitr más tarde (esto está fuera de tema, así que no ampliaré aquí).

0
  • Hazlo en R environnent.
  • poner toda la salida para la ciudad específica en una lista
  • Escriba su RNW con trozos simplemente llamamientos las salidas
  • guardar la imagen de R en la misma carpeta que el informe Sweave y establecer wd a esta misma carpeta
  • Sweave ("yourfile.RnW", output = "yourcity.tex ")
  • Uso texi2dvi para compilar su archivo tex de R

Si tiene muchas ciudades, se debe poner esto en una función.

Cuestiones relacionadas