2016-07-08 49 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