Ich habe ein R-Skript, das TRUE oder FALSE ausgibt. In R, ist es mit einem bona fide T/F-Datentyp, aber wenn ich den Rückgabewert Echo einzuschlagen, so scheint es, eine Zeichenfolge zu sein, zu sagen:Ausgabe eines Boolean von einem Rscript in eine Bash-Variable
"[1] TRUE"
oder
"[1] FALSE"
Sie sind beide von [1] vorangegangen. Weder ist [0], das ist kein Tippfehler. Wie auch immer, das Ergebnis davon ist, dass, wenn ich versuche, die Ausgabe dieses Rscript zu testen, um ein nachfolgendes Skript auszuführen, ich String-Vergleich zu "[1] TRUE" wie folgt machen muss, anstatt mit "TRUE" oder " 1 "das fühlt sich sauberer und besser an.
A=$(Rscript ~/MyR.r)
echo $A
if [ "$A" == "[1] TRUE" ]; then
bash SecondScript.sh
fi
Wie kann ich R entweder Ausgang ein true Boolean oder Bash die Ausgabezeichenfolge akzeptieren und zu 0/1 zum Vergleich konvertieren? Das heißt, ich würde lieber testen ...
if [ $A == TRUE ];
als
if [ "$A" == "[1] TRUE" ];
Ist das möglich, oder soll ich mit diesem glücklich sein, wie es ist, das funktioniert?
* UPDATE *
Hier ist die minimalisierte Version des Rscript, die diese erzeugt ...
myinput <- TRUE #or FALSE
FunctionName <- function(test){
if (test == TRUE){
val <- TRUE
} else {
val <- FALSE
}
return(val)
}
FunctionName(myinput)
FYI, die [1] ist zu sagen Du bist das erste Element eines Vektors. Wenn Sie einen Vektor drucken, der mehr als ein Element enthält, so dass der Ausdruck sich über mehr als eine Zeile erstreckt, druckt R hilfreicherweise [11], [21], [31] usw., so dass Sie zB seine gedruckten 10 kennen Werte pro Zeile. Wenn Sie eine Matrix drucken, beschriftet sie die Zeilen und Spalten als [, 1] und [1,] für Sie. – Spacedman
Zusätzlich zu den guten Lösungen, die unten gegeben werden, glaube ich, dass Sie q (status = val) im Rscript verwenden können, um zu sagen, welcher Wert von Rscript an die Shell zurückgegeben wird. Seien Sie jedoch vorsichtig, wenn Sie mit Mitbearbeitern arbeiten - der Rückgabewert wird oft verwendet, um Fehlermeldungen zu kodieren, so dass sie einen Rückgabewert von ungleich Null annehmen können, den Sie sich lieber merken sollten, als nur eine Antwort aus der Mühle. – mweylandt