2016-07-08 3 views
4

Я следующий сценарий Баш, в котором 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 

Я хочу, чтобы изменить переменные Баш в R сценарии и вернуть их измененные значения в сценарии Баш потому что я передаю измененные переменные где-то еще. 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])) 

Однако выход print и echo соответственно являются:

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

, который показывает, что новые значения не передаются от R колотить. Что я делаю не так?

ответ

3

Поскольку Rscript не разрешает манипуляции с переменной окружения, вам необходимо будет записать вывод R из программы bash.

Одна из многих возможностей является использование 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' is' "1" "Я хочу, чтобы иметь возможность использовать его в качестве числа для большего количества вычислений в сценарии bash, но все, что я пытаюсь преобразовать в числовой например, среди многих других 'c = $ {RESULT [3]} | sed" s/\ "// g" ', это не работает. Он считается персонажем (я думаю) независимо от того, что я делаю. – SnowFrog

Смежные вопросы