Ich habe R CMD BATCH my_script.R
von einem Terminal aus ein R
Skript ausgeführt. Ich bin jetzt an dem Punkt angelangt, an dem ich dem Befehl ein Argument übergeben möchte, habe aber einige Probleme, damit es funktioniert. Wenn ich das tue , R CMD BATCH my_script.R blabla
dann blabla
wird die Ausgabedatei, anstatt zur Verfügung Skript die R als Argument interpretiert wird ausgeführt werden.
Ich habe versucht, Rscript my_script.R blabla
was blabla
als Argument richtig weiterzugeben scheint , aber dann bekomme ich nicht die my_script.Rout
Ausgabedatei, mit der ich komme R CMD BATCH
(ich möchte die .Rout
Datei). Während ich die Ausgabe eines Aufrufs an Rscript
einen Dateinamen meiner Wahl umleiten könnte , würde ich die in der Datei enthaltenen R-Eingabebefehle nicht R CMD BATCH
wie in der .Rout
Datei erhalten.
Im Idealfall bin ich also auf der Suche nach einer Möglichkeit, Argumente an ein R-Skript zu übergeben, das über die R CMD BATCH
Methode ausgeführt wird. Ich würde mich jedoch über einen Ansatz freuen, der verwendet wird, Rscript
wenn es eine Möglichkeit gibt, eine vergleichbare .Rout
Datei zu erstellen.
R CMD BATCH
ein Relikt zu sein. Das, was mir daran gefällt, ist, dass es eine.Rout
Datei erzeugt , die nicht nur die Skriptausgabe enthält, sondern auch die Eingabebefehle / Kommentare aus der.R
Skriptdatei verschachtelt , die diese Ausgabe erzeugt hat.R CMD BATCH
.R CMD BATCH
mitknitr
, zum BeispielRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(können Sie ersetzenstitch
mitstitch_rhtml
oderstitch_rmd
, und Sie müssen installierenknitr
von Github , da ich nur einen Fehler gefundenstitch
...)Rscript myfile.R > path/to/mylog.Rout
und anstatt auf stdout (dem Bildschirm) gedruckt zu werden, wird die Ausgabe der Datei in Ihrer.Rout
Datei gespeichert.Rscript myfile.R | tee mylog.Rout
Nachdem ich die hier beschriebenen Optionen ausprobiert hatte, fand ich diesen Beitrag von Forester in R-Bloggern. Ich denke, es ist eine saubere Option.
Ich habe seinen Code hier eingefügt:
Von der Kommandozeile
Test.R
In test.out
Danke an Forester !
quelle
--args
ist der Schlüssel. Es funktioniert auch mitR --no-save --no-restore --args a=1 < test.R
undR --no-save --no-restore < test.R --args a=1
In Ihrem R-Skript heißt es
test.R
:Führen Sie über die Befehlszeile Folgendes aus:
Ihre Ausgabedatei test.Rout zeigt an, dass das Argument
4
erfolgreich an R übergeben wurde:quelle
Sie müssen Argumente vor setzen
my_script.R
und-
für die Argumente verwenden, zcommandArgs()
wird-blabla
in diesem Fall als Zeichenkette empfangen . Weitere Informationen finden Sie in der Hilfe:quelle
args <- commandArgs(FALSE)
und dann args drucken, ich mit allen Argumenten am Ende, auch solche, die nicht von mir sind, wie--restore
,--save
etc. Wenn ichcommandArgs(TRUE)
mich keine Argumente überhaupt bekommen. Gibt es eine Möglichkeit, nur meine eigenen zusätzlichen Argumente zu erhalten?--args
sieht vielversprechend aus, aber ich habe es nicht zum Laufen gebracht ...Ich füge eine Antwort hinzu, weil ich denke, dass eine einzeilige Lösung immer gut ist! Fügen Sie über Ihrer
myRscript.R
Datei die folgende Zeile hinzu:Dann senden Sie Ihr Skript mit etwas wie:
Beispielsweise:
Dann:
quelle
Hier ist eine andere Möglichkeit, Befehlszeilenargumente mit zu verarbeiten
R CMD BATCH
. Mit meinem Ansatz, der auf einer früheren Antwort hier aufbaut , können Sie Argumente in der Befehlszeile angeben und in Ihrem R-Skript einige oder alle Standardwerte angeben.Hier ist eine R-Datei, die ich test.R nenne :
In der Kommandozeile, wenn ich tippe
dann haben wir innerhalb von R
a
=2
undb
=c(2,5,6)
. Aber ich könnte zum Beispiel weglassenb
und ein anderes Argument hinzufügenc
:Dann haben wir in R
a
=2
,b
=c(1,1,1)
(die Standardeinstellung) undc
="hello"
.Schließlich können wir der Einfachheit halber den R-Code in eine Funktion einbinden, solange wir uns um die Umgebung kümmern:
quelle