2012-05-13 6 views
5

TRUEまたはFALSEを出力するRスクリプトがあります。 Rでは、それは正真正銘のT/Fのデータ型を使用していますが、私はbashのにその戻り値をエコーするとき、文字列のようだ、と言って:RscriptからBash変数にブール値を出力します

"[1] TRUE"

または

"[1] FALSE"

これらの両方に[1]が付いています。どちらも[0]ではありません。それはタイプミスではありません。とにかく、このRscriptの出力をテストして後続のスクリプトを実行しようとすると、「TRUE」または「TRUE」と比較する代わりに、以下のように「[1] TRUE」との文字列比較を行う必要があります。 1 "が、よりクリーンでより良い感じです。

A=$(Rscript ~/MyR.r) 
echo $A 
if [ "$A" == "[1] TRUE" ]; then 
    bash SecondScript.sh 
fi 

どのように私はRのいずれかの出力真ブール、またはバッシュ出力文字列を受け入れ、比較のために0/1に変換することができますか?つまり、私はむしろ可能ということですか、私はそれが働く、どのように、これに満足する必要があります

if [ "$A" == "[1] TRUE" ]; 

より

if [ $A == TRUE ]; 

...をテストしたいですか?

* UPDATE *

ここでは、これを生成しRscriptのminimalizedバージョンだ...

myinput <- TRUE #or FALSE 

FunctionName <- function(test){ 
if (test == TRUE){ 
val <- TRUE 
} else { 
val <- FALSE 
} 
return(val) 
} 

FunctionName(myinput) 
+2

、[1]語っていますこれはベクトルの最初の要素です。複数の要素を持つベクトルを印刷して複数の行にまたがる場合、Rは[11]、[21]、[31]などを印刷するので、印刷された10行ごとの値。行列を印刷すると、行と列に[、1]と[1、]というラベルが付けられます。 – Spacedman

+1

下記の良い解決策に加えて、Rscriptのq(status = val)を使用して、Rscriptからどの値がシェルに返されるかを言うことができると思います。ただし、共同作業者と作業している場合は注意してください。返り値は、エラーメッセージをエンコードするためによく使用されるため、ミルの返答だけでなく、心配する価値のある値としてゼロ以外の戻り値を取ることがあります。 – mweylandt

答えて

9

代わりの印刷()または暗黙的なプリント(のいずれかを使用して) - 発生INGオブジェクト名がRインタプリタに提供されるときは、cat()を使用し、TRUEまたはFALSEの前に "[1]"を付加しないでください。 0/1が必要な場合は、cat(as.numeric(.))を使用します。代わりにこれを試してみてください:

myinput <- TRUE #or FALSE 
FunctionName <- function(test){ 
    if (test == TRUE){ 
       val <- TRUE 
        } else { 
       val <- FALSE 
      } 
    cat(as.numeric(val)) 
} 
FunctionName(myinput) 

あなたは更なる処理のためにその値を必要に応じてあなたも、この使用することができます:あなたのRスクリプトはありません、あなたが上で、次のいずれかを行うことができますどのような変更のショート

cat(as.numeric(val)); invisible(val) 
+0

これは完全に機能しました。私をinvisible()に紹介してくれてありがとう。 – Mittenchops

0

をバッシュ側:

if [[ $A == *TRUE* ]] 

または

if [[ $A =~ TRUE ]] 
第2のケースで

は、正規表現のマッチングで、通常のパターンを変数に入れることをお勧めします:

pattern=TRUE 
if [[ $A =~ $pattern ]] 

が、このような明らかに簡単な例ではそれは必要はありません。

0

あなたはまた、TRUE/FALSEにRの出力を変換bashの関数を定義することができます。

r_to_bash() { 
    echo "$1" | cut -d' ' -f2 
} 

今、あなたは好き、それを使用することができます。

FYI
A=$(r_to_bash "$A") 
if [ $A == TRUE ]; 
+0

または 'r_to_bash(){echo" $ {1#*} "; } ' –

関連する問題