2016-07-08 50 views
4

我有以下的bash脚本中的R脚本被称为返回的参数来自R来砸

#!/bin/bash 

declare -x a=33 
declare -x b=1  
declare -x c=0 

Rscript --vanilla MWE.R $a $b $c 

echo $a $b $c 

我想修改bash的变量在R脚本,并在bash脚本返回其修改后的值因为我然后将修改的变量传递到其他地方。将R脚本是

#!/usr/bin/env Rscript 
args = commandArgs(trailingOnly=TRUE) 

Rb = as.numeric(args[2]) 
Rc = as.numeric(args[3]) 

Rb = Rb + 1 
Rc = Rc + 1 

args[2]=Rb 
args[3]=Rc 

print(c(args[1],args[2],args[3])) 

然而,printecho的输出分别为:

[1] "33" "2" "1" 
33 1 0 

这表明新值没有被选自R传递到抨击。我究竟做错了什么?

回答

3

由于Rscript不允许环境变量操作,您将需要捕获bash程序的R输出。

之一许多可能性是使用array

#!/bin/bash 

declare a=33 
declare b=1  
declare c=0 

declare -a RESULT 
RESULT=($(Rscript --vanilla MWE.R $a $b $c)) 

a=${RESULT[1]} 
b=${RESULT[2]} 
c=${RESULT[3]} 
+0

这不是我最初的问题,但我不能找到一种方法来操纵数组的结果 - 我可以修改的问题如果最好的话。我需要测试'c'是否等于1,但是我试图将输出转换为整数的所有内容都失败了(自从你第一次回答以来,我试过了!)。它看起来像我尝试围绕结果引号阻止我进一步操纵,甚至像'c = $ {RESULT [3]} | sed“s/\”// g“'不起作用,基本上''c''总是好像是''1''''''''但是从来没有'1' – SnowFrog

+0

好,你想达到什么目的?算术操作将在bash脚本中? – klashxx

+0

如果'c'为'“1”'然后我希望能够将它用作bash脚本中的更多计算的数字,但无论我尝试将其转换为数字例如在其他许多'c = $ {RESULT [3]} | sed“s/\”// g“'中,它不起作用。无论我做什么,它都被认为是一个角色(我猜)。 – SnowFrog