2017-01-02 2 views
0

Ich habe einige Probleme mit meinem R-Skript, weil ich es aus einem Bash-Skript verwenden möchte. Mein Problem kommt, wenn ich das Skript aufrufen und stellen ihre Argumente, verwende ich die folgende BefehlszeileSo lesen Sie Argumente als numerischer Vektor

Rscript myscript.R 1,2,1,3,2,3 

Ich möchte das Argument „1,2,1,3,2,3“ als numerischer Vektor verwenden, in um seine Länge und Elemente zu verwenden. So in myscript.R der Code:

args <- commandArgs(trailingOnly=TRUE) 
comparisons <- args[1] 

aber wenn ich diese Variable comparisons auf andere Dinge verwenden, kommt es den Fehler:

for (i in seq(from = 1, to = length(comparisons)-1, by = 2)) 
{ 
... 
} 

Fehlermeldung:

Error in seq.default(from = 1, to = (length(comparisons) - 1), by = 2) : 
wrong sign in 'by' argument 
Calls: seq -> seq.default 
Execution halted 

Wie kann Ich habe das Argument comparisons als numerischer Vektor gelesen?

+1

Es wird immer noch vom 'r' Interpreter ausgeführt, hat nichts mit' bash' zu tun und entfernt das Tag. – Inian

Antwort

2

mit Ihrem Code, comparisions ist nur ein Ein-Element-String-Vektor, so (length(comparisons) - 1) = 0. Dies führt dazu, dass from 1 -> to 0 abnimmt, aber by 2 ist positiv, somit seq fehlschlägt.

können Sie diesen Code verwenden, um einen numerischen Vektor zu konvertieren

comparisons <- unlist(lapply(strsplit(comparisons, ","), as.numeric)) 
+0

Vielen Dank, es funktioniert gut und löst mein Problem! –

2

Die scan() Funktion ist ein oft übersehen, aber sehr nützliches und vielseitiges Werkzeug:

scan(text=args[1], sep=",", quiet=TRUE) 

Wenn Sie nicht tun brauchen double s dann:

scan(text=args[1], what=integer(), sep=",", quiet=TRUE) 

wird Ihnen Integer geben s.

Verwandte Themen