2015-10-27 67 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