Sto eseguendo uno script R tramite script bash e voglio restituire l'output dello script R allo script bash per continuare a lavorare con esso.
Il bash è sth come questo:
#!/bin/bash
Rscript MYRScript.R
a=OUTPUT_FROM_MYRScript.R
do sth with a
e lo script R è come questo:
for(i in 1:5){
i
sink(type="message")
}
Voglio bash lavorare con una variabile da R al momento, nel senso che: bash riceve i = 1 e lavora con quello, quando quell'attività viene eseguita, riceve i = 2 e così via.
Qualche idea su come farlo?
risposte:
3 per risposta № 1Un'opzione è rendere il tuo script R eseguibile con #!/usr/bin/env Rscript
(impostazione del bit eseguibile, ad es. chmod 0755 myrscript.r
, chmod +x myrscript.r
ecc.) e trattalo come qualsiasi altro comando, ad es. assegnando i risultati a una variabile di matrice di seguito:
myrscript.r
#!/usr/bin/env Rscript
cat(1:5, sep = "n")
mybashscript.sh
#!/bin/bash
RES=($(./myrscript.r))
for elem in "${RES[@]}"
do
echo elem is "${elem}"
done
nrussell$ ./mybashscript.sh
elem is 1
elem is 2
elem is 3
elem is 4
elem is 5
0 per risposta № 2
Qui è MYRScript.R:
for(iter in 1:5) {
cat(iter, " ")
}
e qui è il tuo bash
script:
#!/bin/bash
r_output=`Rscript ~/MYRscript.R`
for iter in `echo $r_output`
do
echo Here is some output from R: $iter
done
Here is some output from R: 1
Here is some output from R: 2
Here is some output from R: 3
Here is some output from R: 4
Here is some output from R: 5