2015-10-27 95 views
3

我正在通過bash腳本運行R腳本,並且希望將R腳本的輸出返回給bash腳本以繼續使用它。R:將變量從R傳遞給unix

bash的是某事像這樣:

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

和將R腳本是某事像這樣:

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

我想慶典用一個變量來自R在工作的時候,意思是: bash接收i = 1並且與其一起工作,當任務完成時,接收i = 2等等。

任何想法如何做到這一點?

+0

要從構建一個管你將R腳本運行到另一個shell命令。這樣對嗎? – jogo

+0

是的,但是從R到unix,而不是從unix到R – gugy

+0

我想使用R輸出(一個文件名)直接在bash中用來修改另一個文件。似乎我更容易這樣...? – gugy

回答

3

一種選擇是讓你的[R腳本可執行文件#!/usr/bin/env Rscript (設置可執行位;例如chmod 0755 myrscript.rchmod +x myrscript.r等),並且像對待任何其他命令一樣對待它,例如,分配結果下面的數組變量:

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

奇怪的是,運行解決方案時,我得到了一個Permission denied(for myrscript.r)錯誤。任何想法爲什麼? – gugy

+1

首先執行'chmod 0755 myrscript.r', –

+0

@gugy對不起,我在回答中掩蓋了這一點;謝謝德克。 – nrussell

0

這裏是MYRScript.R

for(iter in 1:5) { 
    cat(iter, ' ') 
} 

,這裏是你的bash腳本:

#!/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