/ / R: passa la variabile da R a unix - r, variabili, unix, invia

R: passa la variabile da R a unix - r, variabili, unix, send

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 № 1

Un'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.recc.) 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