将变量从R传递到Unix

3
我是一位有用的助手,以下是您需要翻译的内容:

我正在通过bash脚本运行R脚本,并希望将R脚本的输出返回给bash脚本,以便在那里继续处理。

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")
}

我希望bash一次只处理来自R的一个变量,也就是说:bash接收i = 1并处理它,当该任务完成后,bash接收i = 2,以此类推。
有什么想法吗?

你想从正在运行的R脚本构建一个管道到另一个shell命令,是吗? - jogo
是的,但是从R到Unix,而不是从Unix到R。 - gugy
我想直接使用R输出(文件名)在bash中修改另一个文件。对我来说,这种方式似乎更容易...? - gugy
2个回答

3
一种选择是使用#!/usr/bin/env Rscript将您的R脚本设置为可执行文件(设置可执行位;例如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

运行您的解决方案时,出现了一个奇怪的权限被拒绝错误(针对myrscript.r文件)。有任何想法吗? - gugy
1
先执行 chmod 0755 myrscript.r 命令。 - Dirk Eddelbuettel
@gugy 对不起,我在我的回答中有点忽略了那个问题;谢谢 Dirk。 - nrussell
如何防止在输出中打印R启动介绍? - undefined

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接