2012-05-28 18 views
14

लूप के 2 स्तर हैं। लूप के उप-स्तर में कुछ होने पर शीर्ष स्तर के लूप के अगली बार कैसे कूदें?आर भाषा: अगले शीर्ष स्तर लूप पर कैसे कूदें?

बहुत बहुत धन्यवाद!

uuu=0 
for (i in 1:100) 
{ 
    uuu=uuu+1 
    j=1000 
    for(eee in 1:30) 
    { 
     j=j-1 
     if(j<990) 
     { 
      if j is smaller than 990 I hope start next time of i 
     } 
    } 
} 
+2

देखें: 'next' और' break', लेकिन यहाँ मैं नहीं बल्कि तरह एक आंतरिक पाश होगा: '(1000 में j: 970) के लिए {...}' – daroczig

उत्तर

22

आप next चाहते हैं। देखें कि यह मदद पृष्ठ है: ?"next"

यहां एक मूर्खतापूर्ण उदाहरण है:

for(i in 1:10) { 
    for(j in 1:10) { 
     if(i < 5 || j <5) { 
      next 
     } else { 
      writeLines(paste("i =", i, " j=", j)) 
     } 
    } 
} 

देते:

i = 5 j= 5 
i = 5 j= 6 
i = 5 j= 7 
i = 5 j= 8 
i = 5 j= 9 
i = 5 j= 10 
i = 6 j= 5 
i = 6 j= 6 
i = 6 j= 7 
i = 6 j= 8 
i = 6 j= 9 
i = 6 j= 10 
i = 7 j= 5 
i = 7 j= 6 
i = 7 j= 7 
.... 
7

मुझे लगता है कि आप break का उपयोग करें ताकि आर अपने भीतर for लूप के माध्यम से पाशन बंद हो जाएगा चाहते हैं, इसलिए अपने बाहरी for लूप के अगले पुनरावृत्ति पर जाएं:

for (i in 1:10) { 
    for (j in 1:10) { 
     if ((i+j) > 5) { 
     # stop looping over j 
     break 
     } else { 
     # do something 
     cat(sprintf("i=%d, j=%d\n", i, j)) 
     } 
    } 
} 
# i=1, j=1 
# i=1, j=2 
# i=1, j=3 
# i=1, j=4 
# i=2, j=1 
# i=2, j=2 
# i=2, j=3 
# i=3, j=1 
# i=3, j=2 
# i=4, j=1 
+1

+1 - मैं इस बात से सहमत है कि ओपी के सवाल का सही जवाब है। मैंने केवल एक उत्तर खुद को जोड़ा है b/c मैं आशा करता हूं कि 'अगली' और 'ब्रेक' कैसे भिन्न हो। –

+0

शायद दो लूप तोड़ने के लिए ब्रेक इंडिकेटर जोड़ें – user1421972

13

@flodel के लिए इसका सही उत्तर है, जो next के बजाय break का उपयोग करना है। दुर्भाग्यवश, उस उत्तर में उदाहरण एक ही परिणाम देगा जो भी नियंत्रण प्रवाह निर्माण का उपयोग किया गया था।

मैं निम्नलिखित उदाहरण जोड़ रहा हूं कि यह स्पष्ट करने के लिए कि दोनों संरचनाओं का व्यवहार अलग-अलग कैसे है।

## Using `break` 
for (i in 1:3) { 
    for (j in 3:1) {  ## j is iterated in descending order 
     if ((i+j) > 4) { 
     break   ## << Only line that differs 
     } else { 
     cat(sprintf("i=%d, j=%d\n", i, j)) 
     }}} 
# i=1, j=3 
# i=1, j=2 
# i=1, j=1 

## Using `next` 
for (i in 1:3) { 
    for (j in 3:1) {  ## j is iterated in descending order 
     if ((i+j) > 4) { 
     next   ## << Only line that differs 
     } else { 
     cat(sprintf("i=%d, j=%d\n", i, j)) 
     }}} 
# i=1, j=3 
# i=1, j=2 
# i=1, j=1 
# i=2, j=2 ## << Here is where the results differ 
# i=2, j=1 ## 
# i=3, j=1 ## 
संबंधित मुद्दे