2010-12-28 15 views
15

Ich habe ein Bash-Skript, das eine CSV-Datei und eine R-Datei erstellt, die daraus Grafiken erstellt.Befehlszeilenargumente in Bash zu Rscript

Am Ende der Bash-Skript Ich nenne Rscript Graphs.R 10

Die Antwort, die ich erhalten, ist wie folgt:

Error in is.vector(X) : subscript out of bounds 
Calls: print ... <Anonymous> -> lapply -> FUN -> lapply -> is.vector 
Execution halted 

Die ersten Zeilen meiner Graphs.R sind:

#!/bin/Rscript 
args <- commandArgs(TRUE) 
CorrAns = args[1] 

Keine Ahnung, was ich falsch mache? Der Rat im Netz scheint mir zu sagen, dass dies funktionieren sollte. Es ist sehr schwer, einen Sinn zu geben commandArgs

Antwort

13

Mit dem folgenden in args.R

print(commandArgs(TRUE)[1]) 

und folgende Unterlagen in args.sh

Rscript args.R 10 

Ich bekomme folgende Ausgabe von bash args.sh

[1] "10" 

und kein Fehler. Falls erforderlich, konvertieren Sie sie unter Verwendung von as.numeric(commandArgs(TRUE)[1]) in einen numerischen Typ.

+0

Danke. Ich habe entdeckt, dass es als String zurückkehrt. Wie konvertiere ich das in einen numerischen Wert? Ich versuche nur, die Antwort darauf zu finden. – samar

+0

@samar 'print (as.numeric (commandArgs (TRUE) [1]))' druckt '[1] 10'. – marcog

+0

Nur die Antwort gefunden. x <- (commandArgs (TRUE) [1]) und dann CorrAns <- eval (parse (text = x)) – samar

1

die docs Lesen, es scheint, dass Sie zu commandArgs() Möglicherweise müssen Sie die TRUE aus dem Anruf entfernen, wie Sie mit --args das Skript nicht nennen. Entweder das oder Sie müssen Rscript Graphs.R --args 10 anrufen.

Nutzungs

commandArgs(trailingOnly = FALSE)

Argumente

trailingOnly logisch. Sollten nur Argumente nach --args zurückgegeben werden?

+0

Ich habe dies versucht und folgende Fehlermeldung erhalten – samar

+0

Danke.Ich tat dies, aber die Fehlermeldung ist identisch mit dem, was ich zuerst berichtete – samar

+0

@samar Siehe meine neue Antwort und sehen, ob das hilft? – marcog

5

Nur eine Vermutung, vielleicht müssen Sie CorrAns von Zeichen zu numerischen konvertieren, da Wert Abschnitt ?CommandArgs sagt:

Ein Zeichen Vektor den Namen der ausführbaren Datei und die Benutzer gelieferten enthält Kommandozeilenargumente.

UPDATE: Es könnte so einfach sein wie:

#!/bin/Rscript 
args <- commandArgs(TRUE) 
(CorrAns = args[1]) 
(CorrAns = as.numeric(args[1])) 
+0

Danke. Nicht ganz sicher, wie man das umsetzt. Ich glaube nicht, dass Variablennamen in R entweder mit einem Zeichen oder numerisch verknüpft sind. Allerdings wird das R-Intro-Buch nochmals überprüft. – samar

+0

@samar Ich würde vorschlagen, 'as.numeric (args [1])' wie in meiner aktualisierten Antwort zu versuchen. –

+0

Vielen Dank. Dies ist eine neue Seite für mich, denn R ist eine neue Erfahrung für mich. Beide bieten große Zufriedenheit. – samar

0

Rscript args.R 10 wobei 10 der numerische Wert ist, den wir an das R-Skript übergeben möchten.

print(as.numeric(commandArgs(TRUE)[1]) gibt den Wert aus, der dann einer Variablen zugewiesen werden kann.

+0

Dies ist das gleiche wie meine aktualisierte Antwort, und die Antwort, die Sie als "beste" akzeptiert haben, beantwortet Ihre Frage nicht. –

+0

Joshua, soweit ich weiß, habe ich Marcogs Antwort an meine Bedürfnisse angepasst und dann als "beste" Antwort eingegeben. Ich erinnere mich nicht, dass deine letzte Antwort zu dieser Zeit sichtbar war. Ich schätze jedoch die Hilfe. – samar

Verwandte Themen