2012-02-22 16 views
5

Sto usando R e Sweave per generare un rapporto.Argomenti R/Sweave

R CMD Sweave MyReport.Rnw

Voglio essere in grado di inviare argomenti al codice R perché il rapporto è, naturalmente, "Dynamic" .Così, vorrei essere in grado di fare qualcosa del genere:

R CMD SWeave MyReport.Rnw PatientID = 5

... e fare in modo che il codice R legga il valore PatientId in una variabile ...

Come si fa? Qualcuno ha menzionato l'uso di variabili d'ambiente, ma sembra una soluzione non elegante.

risposta

5

ottenere gli argomenti passati da linea di comando R, è possibile utilizzare la funzione di commandArgs(), ma purtroppo R CMD Sweave non supporta opzioni di riga di comando aggiuntive. Tuttavia, puoi comunque chiamare Sweave per R -e, ad es.

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

In MyReport.Rnw, fare un po 'di elaborazione testo su commandArgs(TRUE), che vi dà una stringa di caratteri PatientId=1 in questo caso.

Ma credo che una migliore pratica è quella di utilizzare la funzione Sweave() in uno script R direttamente; per esempio. in questo caso è possibile scrivere il processo in uno script come

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

e in MyReport.Rnw si utilizza la variabile globale PatientId direttamente. Se si desidera generare una serie di report, è anche possibile utilizzare un ciclo per PatientId.

1

È necessario 'scrivere' il valore in cui può essere 'letta':

  • variabili d'ambiente, come detto, sono un facile approccio con sys.getenv()

  • i file di configurazione o di dati che è possibile leggere

  • memorizzazione banca dati

. 10

ecc pp Ricordiamo che il codice R è davvero eseguito in modo da poter sempre fare un due fasi:

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

Ho spesso disapprovato l'utilizzo di variabili di ambiente, che ritengo non sia una buona pratica nella ricerca riproducibile perché le variabili di ambiente sono spesso specifiche di un singolo sistema. –

+0

Non sono nemmeno i miei preferiti, ma R per esempio li usa un metro dietro le quinte e lo fa con successo su piattaforme e sistemi differenti. –

Problemi correlati