2012-05-13 11 views
5

में एक बूलियन आउटपुट मेरे पास एक आर स्क्रिप्ट है जो सत्य या गलत उत्पन्न करती है। आर में, यह एक सदाशयी टी/एफ डेटा प्रकार उपयोग कर रहा है, लेकिन जब मैं पार्टी की योजना बनाई अपनी वापसी मान गूंज, यह कह रही है, एक तार हो रहा है:आउटपुट एक प्रतिलिपि से एक बब वैरिएबल

"[1] TRUE"

या

"[1] FALSE"

वे दोनों [1] से पहले हैं। न तो [0] है, यह एक टाइपो नहीं है। वैसे भी, इसका परिणाम यह है कि जब मैं बाद की स्क्रिप्ट चलाने के लिए इस प्रतिलेख के आउटपुट पर परीक्षण करने का प्रयास करता हूं, तो मुझे "TRUE" या "की तुलना करने के बजाय" [1] TRUE "से स्ट्रिंग तुलना करना पड़ता है, 1 "जो क्लीनर और बेहतर महसूस करता है।

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

मैं कैसे आर या तो उत्पादन एक सच्चे बूलियन, या बैश उत्पादन स्ट्रिंग स्वीकार करते हैं और तुलना के लिए 0/1 के लिए परिवर्तित कर सकते हैं? यही कारण है कि यह कैसे है, जो काम करता है, है मैं नहीं बल्कि परीक्षण था के लिए ...

if [ $A == TRUE ]; 

से

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

कि संभव है, या मैं इस के साथ खुश होना चाहिए,?

* अद्यतन *

यहाँ Rscript की minimalized संस्करण है कि इस उत्पन्न करता है ...

myinput <- TRUE #or FALSE 

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

FunctionName(myinput) 
+2

FYI करें, [1] कह रहा है:

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

अब आप इसे पसंद उपयोग कर सकते हैं आप यह एक वेक्टर का पहला तत्व है। यदि आप एक वेक्टर मुद्रित करते हैं जिसमें एक से अधिक तत्व हैं, जैसे कि प्रिंटआउट एक से अधिक पंक्तियों में फैला हुआ है, तो आर मददगार रूप से प्रिंट करेगा [11], [21], [31] आदि ताकि आप जानते हों (उदाहरण के लिए) इसके मुद्रित 10 प्रति पंक्ति मूल्य। यदि आप एक मैट्रिक्स प्रिंट करते हैं तो यह पंक्तियों और स्तंभों को आपके लिए [, 1] और [1,] के रूप में लेबल करता है। – Spacedman

+1

नीचे दिए गए अच्छे समाधानों के अतिरिक्त, मेरा मानना ​​है कि आप प्रतिलिपि में क्यू (स्टेटस = वैल) का उपयोग कर सकते हैं ताकि यह कह सकें कि प्रतिलिपि से खोल में कौन सा मूल्य लौटाया गया है। इसके बारे में सावधान रहें, भले ही आप सहयोगियों के साथ काम कर रहे हों - वापसी मूल्य अक्सर त्रुटि संदेशों को एन्कोड करने के लिए उपयोग किया जाता है ताकि वे एक गैर-शून्य रिटर्न वैल्यू ले सकें, जो कि मिल जवाब के बजाए चिंता करने योग्य कुछ है। – mweylandt

उत्तर

9
के बजाय

या तो प्रिंट() या अस्पष्ट प्रिंट का उपयोग कर() - आईएनजी होता है कि जब आर दुभाषिया को ऑब्जेक्ट नाम दिया जाता है, तो आपको cat() का उपयोग करना चाहिए जो "[1]" को TRUE या FALSE के सामने प्रीपेड नहीं करेगा। यदि आप 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) 

आप आगे की प्रक्रिया के लिए है कि मूल्य की जरूरत है, तो आप भी इस्तेमाल कर सकते हैं इस:

बदल रहा है कि आपके आर स्क्रिप्ट करता है के
cat(as.numeric(val)); invisible(val) 
+0

यह पूरी तरह से काम किया। अदृश्य(), मुझे भी शुरू करने के लिए धन्यवाद। – Mittenchops

0

लघु, आप या तो निम्न में से क्या कर सकते हैं बैश पक्ष:

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

या

if [[ $A =~ TRUE ]] 

दूसरे मामले में, रेगुलर एक्सप्रेशन मिलान के साथ, यह सामान्य रूप से अनुशंसा की जाती है कि पैटर्न एक चर में रखा जाना:

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

लेकिन स्पष्ट रूप से साधारण मामलों में इस तरह के इस रूप में यह आवश्यक नहीं है।

0

तुम भी पार्टी में एक समारोह है कि में आर उत्पादन धर्मान्तरित परिभाषित कर सकते हैं सही/गलत:

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

या 'r_to_bash() {echo" $ {1 # *} "; } ' –

संबंधित मुद्दे