【问题标题】:R: pass variable from R to unixR:将变量从 R 传递到 unix
【发布时间】:2016-01-27 01:18:27
【问题描述】:

我正在通过 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 并使用它,当该任务完成时,接收 i=2 等等。

有什么办法吗?

【问题讨论】:

  • 您想构建一个从正在运行的 R 脚本到另一个 shell 命令的管道。对吗?
  • 是的,但是从 R 到 unix,而不是从 unix 到 R
  • 我想使用 R 输出(文件名)直接在 bash 中使用来修改那里的另一个文件。在我看来,这种方式更容易......?

标签: r variables unix send


【解决方案1】:

一种选择是使用#!/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

【讨论】:

  • 奇怪的是,我在运行您的解决方案时收到 Permission denied (for myrscript.r) 错误。任何想法为什么?
  • 先做一个chmod 0755 myrscript.r
  • @gugy 对不起,我在回答中掩盖了这一点;谢谢你,德克。
【解决方案2】:

这里是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2023-03-25
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多