Search code examples
rvariablesunixsend

R: pass variable from R to unix


I am running an R script via bash script and want to return the output of the R script to the bash script to keep working with it there.

The bash is sth like this:

#!/bin/bash
Rscript MYRScript.R
a=OUTPUT_FROM_MYRScript.R
do sth with a

and the R script is sth like this:

for(i in 1:5){
i
sink(type="message")
}

I want bash to work with one variable from R at the time, meaning: bash receives i=1 and works with that, when that task is done, receives i=2 and so on.

Any ideas how to do that?


Solution

  • One option is to make your R script executable with #!/usr/bin/env Rscript (setting the executable bit; e.g. chmod 0755 myrscript.r, chmod +x myrscript.r, etc...), and just treat it like any other command, e.g. assigning the results to an array variable below:

    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