2015-07-16 9 views
5

Ich bin mit einem Abschlag Bericht von der Kommandozeile über:Pass Parameter von der Befehlszeile in R Abschlag Dokument

R -e "rmarkdown::render('ReportUSV1.Rmd')"

Dieser Bericht wurde in R-Studio gemacht und die Spitze sieht aus wie

--- 
title: "My Title" 
author: "My Name" 
date: "July 14, 2015" 
output: 
    html_document: 
    css: ./css/customStyles.css 
--- 


```{r, echo=FALSE, message=FALSE} 

load(path\to\my\data) 
``` 

Was ich will, ist in der Lage, den Titel zusammen mit einem Dateipfad in den Shell-Befehl übergeben, so dass es mir den rohen Bericht generiert und das Ergebnis ist ein anderer Dateiname.html.

Danke!

Antwort

9

Ein paar Möglichkeiten, es zu tun.

Sie können die Graviszeichen-R Brocken in Ihrem YAML verwenden und die Variablen angeben, bevor machen Ausführung:

--- 
title: "`r thetitle`" 
author: "`r theauthor`" 
date: "July 14, 2015" 
--- 

foo bar. 

Dann:

R -e "thetitle='My title'; theauthor='me'; rmarkdown::render('test.rmd')" 

Oder Sie commandArgs() direkt in der RMD und Futtermittel verwenden können sie in nach --args:

--- 
title: "`r commandArgs(trailingOnly=T)[1]`" 
author: "`r commandArgs(trailingOnly=T)[2]`" 
date: "July 14, 2015" 
--- 

foo bar. 

Dann :

R -e "rmarkdown::render('test.rmd')" --args "thetitle" "me" 

Hier, wenn Sie args R -e ... --args --name='the title' benannt haben, Ihre commandArgs(trailingOnly=T)[1] ist die Zeichenfolge "--name = foo" - es ist nicht sehr klug ist.

In jedem Fall, ich denke, Sie würden eine Art von Fehlerprüfung/Standardüberprüfung wünschen. Ich mache normalerweise ein Kompilierungs-Skript, z.B.

# compile.r 
args <- commandArgs(trailingOnly=T) 
# do some sort of processing/error checking 
# e.g. you could investigate the optparse/getopt packages which 
# allow for much more sophisticated arguments e.g. named ones. 
thetitle <- ... 
theauthor <- ... 
rmarkdown::render('test.rmd') 

Und dann laufen R compile.r --args ... die Argumente liefern in welcher auch immer Format, das ich mein Skript geschrieben habe, zu behandeln.