2012-02-22 10 views
5

Estoy usando R y Sweave para generar un informe.Argumentos R/Sweave

R CMD Sweave MyReport.Rnw

Quiero ser capaz de enviar argumentos para el código R debido a que el informe es, por supuesto, "dinámico" .Así, me gustaría ser capaz de hacer algo como esto:

R CMD Sweave MyReport.Rnw PatientID = 5

... y hacer que el código R lea el valor PatientId en una variable ...

¿Cómo hago esto? Alguien mencionó el uso de variables de entorno, pero eso parece una solución no elegante.

Respuesta

5

Para obtener argumentos pasan de línea de comandos R, puede utilizar la función commandArgs(), pero desafortunadamente R CMD Sweave no admite opciones de línea de comando adicionales. Sin embargo, aún puede llamar a Sweave al R -e, p.

R -e "Sweave('MyReport.Rnw')" --args PatientId=1 

En MyReport.Rnw, que hacer algo de procesamiento de texto en commandArgs(TRUE), que le da una cadena de caracteres PatientId=1 en este caso.

Pero creo que una mejor práctica es usar la función Sweave() en un script R directamente; p.ej. en este caso, se puede escribir el proceso en una secuencia de comandos como

PatientId <- 1 
Sweave("MyReport.Rnw") 

y en MyReport.Rnw que utilizar la variable global PatientId directamente. Si desea generar una serie de informes, incluso puede usar un ciclo para PatientId.

1

Necesitas 'escribir' el valor en el que se puede 'leer':

  • variables de entorno, como se ha mencionado, son un método fácil con sys.getenv()

  • archivos de configuración o de datos que puede leer

  • de almacenamiento de base de datos

. 10

etc pp Recordemos que el código R es realmente ejecutados por lo que siempre se puede hacer una de dos pasos:

rScriptOne.r     # write to foo.txt 
R CMD Sweave MyReport.Rnw  # reads from foo.txt 
+0

A menudo me canso de usar variables de entorno, lo cual no es una buena práctica en la investigación reproducible porque las variables de entorno a menudo son específicas de un solo sistema. –

+0

No son mis favoritos, pero R, por ejemplo, los usa una tonelada métrica detrás de escena, y lo hace con éxito en plataformas y sistemas diferentes. –