2013-03-23 3 views
12

मैं हालांकि यह बहुत सरल है, अगर बयान के साथ एक छोटे से कोड कोशिश कर रहा था, लेकिन वहाँ कुछ मैं वास्तव में यहाँ उलझन में है कोडयदि आर में कथन में केवल एक पंक्ति हो सकती है?

n<-857 
while(n!=1){ 
if(n<=0) 
print("please input a positive integer") 
else if(n%%2==0) 
n<-n/2 
print(n) 
else 
n<-3*n+1 
print(n) 
    } 

हम ऊपर देखते हैं, जब आर में इस कोड चल रहा है, वहाँ आता है त्रुटि, लेकिन अगर मैं इस

if(n<=0) 
    print("please input a positive integer") 
    else if(n%%2==0) 
    n<-n/2 
    else 
    n<-3*n+1 

यह ठीक है की तरह अगर बयान बदलने के लिए, मेरे सवाल है कि हम केवल एक फैसले के तहत एक पंक्ति लिख सकते हैं? अगर मैं प्रत्येक न्यायाधीश के बाद कुछ और करना चाहता हूं, तो मुझे इस मामले की तरह क्या करना चाहिए, मैं एन के मान को बदलना चाहता हूं, लेकिन इसे प्रदर्शित करना भी चाहता हूं, मुझे क्या करना चाहिए? आप घुंघराले ब्रेसिज़ के साथ बहुत ज्यादा

+0

यह लगता है कि आप अजगर, जहां खाली स्थान के मामलों से आ जा सकता है की तरह। एक सामान्य नियम के रूप में, अधिकांश भाषाओं (आर, सी, जावा, जावास्क्रिप्ट) व्हाइटस्पेस की परवाह नहीं करते हैं। सभी टैब, कैरिज रिटर्न, और रिक्त स्थान जो आप दर्ज कर सकते हैं, कोई चीज़ नहीं बदलते हैं। वे समूह कोड को ब्लॉक में एक साथ ब्रैकेट {} का उपयोग करते हैं। मौजूदा उत्तरों का उल्लेख है, लेकिन एक सामान्य उच्च स्तरीय विचार के रूप में नहीं। – mightypile

उत्तर

31

सटीक होने के लिए, यह लाइनों के बारे में नहीं है, लेकिन लगभग विवरण है।

> if (TRUE) 1 else 3 
[1] 1 

एक बयान लाइन (यदि पूरा) के अंत में खत्म हो जाएगा, तो आप उस अच्छी तरह से देख सकते हैं इंटरैक्टिव मोड में यदि आप लाइन द्वारा कोड लाइन दर्ज करें: आप एक पंक्ति में पूरे if else बयान हो सकता है:

> if (TRUE) 
+ 1 
[1] 1 
> else 
Fehler: Unerwartete(s) 'else' in "else" # error: unexpected 'else' in "else" 
> 3 
[1] 3 

if रूप if (condition) statement या if (condition) statement else other.statement में आ सकते हैं, दुभाषिया मान लिया गया बयान लाइन 2 के बाद पूरा हो गया है, तो पहले संस्करण का मतलब है - इंटरैक्टिव मोड में समझदारी से इंतजार नहीं कर सकता एक else आगे दिखाई देता है या नहीं। यह source डी कोड में भिन्न है - वहां यह अगली पंक्ति के साथ स्पष्ट है जो यह है।

अर्धविराम अंत बयानों के साथ-साथ:

> if (TRUE) 1; else 3 
[1] 1 
Fehler: Unerwartete(s) 'else' in " else" # error: unexpected 'else' in "else" 

लेकिन आप केवल हालत की प्रत्येक शाखा में एक बयान हो सकता है।

> if (TRUE) 1; 2 else 3 
[1] 1 
Fehler: Unerwartete(s) 'else' in " 2 else" # error: unexpected 'else' in "2 else" 

घुंघराले ब्रेसिज़ समूह विवरणों को तो वे एक कथन के रूप में दिखाई देते हैं।

> if (TRUE) {1; 2} else 3 
[1] 2 
+0

आपके कृपया पुनः चलाने के लिए धन्यवाद, मैं सहायता फ़ाइल देखना जारी रखूंगा, आर में कौशल इतना सुंदर है – TOPMAD

9

समूह बयान करने के लिए धन्यवाद, उन्हें चारों ओर के रूप में आप while पाश के साथ किया है:

if(n<=0) { 
    print("please input a positive integer") 
} else if(n%%2==0) { 
    n<-n/2 
    print(n) 
} else { 
    n<-3*n+1 
    print(n) 
} 

यह आपको if अंदर कई बयान कर देता है, else if और अनुमति देगा अंतिम else

+0

धन्यवाद लाखों लोग यह बहुत दयालु हैं – TOPMAD

+0

आपको बहुत धन्यवाद – TOPMAD

11

आपको {} का उपयोग करना है ताकि if कथन को एक से अधिक पंक्तियों की अनुमति मिल सके। इसे आज़माएं:

n<-857 
while(n!=1){ 
    if(n<=0){ 
    print("please input a positive integer") 
    } 

    else if(n%%2==0){ 
    n<-n/2 
    print(n) 
    } 
    else { 
     n<-3*n+1 
     print(n) 
    } 
} 
+1

आपको बहुत धन्यवाद – TOPMAD

+1

यह केवल इसलिए काम करता है क्योंकि यह 'while' लूप में है। [आर भाषा परिभाषा] से (http://cran.r-project.org/doc/manuals/R-lang.html#if): "जब कोई कथन एक ब्लॉक में नहीं है, तो अगर मौजूद है, तो कथन 2 के अंत के समान रेखा पर दिखाई देते हैं। अन्यथा कथन 2 के अंत में नई पंक्ति ifes को पूरा करती है और मूल्यांकन किए गए एक वाक्य रचनात्मक रूप से पूर्ण बयान उत्पन्न करती है। एक सरल समाधान ब्रेसिज़ में लिपटे कंपाउंड स्टेटमेंट का उपयोग करना है, और अन्य को डालना बयान के अंत को चिह्नित करने वाली बंद ब्रेस के समान रेखा। " – GSee

+0

@Gsee, उस संदर्भ को खींचने के लिए धन्यवाद। –

0

कभी घुंघराले बार्स के बारे में सुना?

n<-857 
while(n!=1){ 
    if(n<=0) { 
     print("please input a positive integer") 
    } else if(n%%2==0) { 
     n<-n/2 
     print(n) 
    } else { 
     n<-3*n+1 
     print(n) 
    } 
} 
+0

धन्यवाद कि आप एक अच्छा दिन चाहते हैं – TOPMAD

+1

ऐसा लगता है कि इस उत्तर में बहुत सारे डाउनवॉट हैं। मुझे आश्चर्य है कि ऐसा क्यों है? –

+2

@RicardoSaporta snarky टिप्पणी? कोई स्पष्टीकरण नहीं? [मैंने रास्ते से नीचे नहीं छोड़ा] शर्मिंदा लोग जब टिप्पणियां छोड़ते हैं तो टिप्पणियां नहीं छोड़ते हैं ... –

1

जबकि प्रत्यक्ष उत्तर, जैसा कि उल्लेख किया गया है, घुंघराले ब्रेसिज़ का उपयोग करने के लिए किया गया है;
यह जोड़ने लायक है कि आप कई कार्यों में <- असाइनमेंट ऑपरेटर को एकीकृत कर सकते हैं।

अपने विशिष्ट मामले में:

print(n <- 3*n+1) 

    ## instead of 
    # n <- 3*n+1 
    # print(n) 


ध्यान दें कि यहां = का उपयोग कर होगा नहीं काम करते हैं। यह <-

+0

यह इस उदाहरण के लिए कोई समस्या नहीं है, लेकिन असाइनमेंट केवल तब होगा जब तर्क वास्तव में फ़ंक्शन में मूल्यांकन किया जाता है। प्रभाव यह है कि अभिव्यक्ति को मान के बजाए फ़ंक्शन में पास किया जाता है (जैसा कि यह सी/सी ++ में होगा)। उदाहरण: 'जी <- फ़ंक्शन (एक्स) {}; एन <- 1; जी (एन <- 2); एन' –

+0

@ मैथ्यूलंडबर्ग, बिल्कुल। यही कारण है कि मैंने अपने बयान को इंगित किया कि यह _many_ कार्यों के साथ काम करता है। :) –

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