Ho uno script R che emette VERO o FALSO. In R, viene utilizzato un/F tipo di dati bona fide T, ma quando faccio eco il valore restituito per colpire, sembra essere una stringa, dicendo:Emettere un valore booleano da un Rscript in una variabile Bash
"[1] TRUE"
o
"[1] FALSE"
Entrambi sono preceduti da [1]. Né è [0], non è un errore di battitura. Ad ogni modo, il risultato di questo è ciò che quando provo a testare l'output di questo Rscript per eseguire uno script successivo, devo fare il confronto tra stringhe su "[1] TRUE" come sotto, invece di confrontarlo con "TRUE" o " 1 "che sembra più pulito e migliore.
A=$(Rscript ~/MyR.r)
echo $A
if [ "$A" == "[1] TRUE" ]; then
bash SecondScript.sh
fi
Come posso fare R sia uscita una vera booleana, o Bash accettare la stringa di output e convertirlo in 0/1 per il confronto? Cioè, preferirei prova per ...
if [ $A == TRUE ];
di
if [ "$A" == "[1] TRUE" ];
E 'questo possibile, o dovrei essere contento di questo, come è, che funziona?
* UPDATE *
Ecco la versione minimizzato del rscript che genera questo ...
myinput <- TRUE #or FALSE
FunctionName <- function(test){
if (test == TRUE){
val <- TRUE
} else {
val <- FALSE
}
return(val)
}
FunctionName(myinput)
Cordiali saluti, il [1] sta dicendo questo è il primo elemento di un vettore. Se si stampa un vettore che contiene più di un elemento in modo tale che la stampa si estenda su più di una riga, R stamperà utile [11], [21], [31] ecc. In modo che si sappia (per esempio) la sua stampa 10 valori per riga. Se stampi una matrice, etichetta le righe e le colonne come [, 1] e [1,] per te. – Spacedman
Oltre alle buone soluzioni fornite di seguito, credo che si possa usare q (status = val) in Rscript per dire quale valore viene restituito alla shell da Rscript. Fai attenzione a questo però se lavori con i collaboratori - il valore di ritorno viene spesso utilizzato per codificare i messaggi di errore in modo che possano assumere un valore di ritorno diverso da zero come qualcosa di cui preoccuparsi piuttosto che una semplice risposta. – mweylandt