How to jump to next top level loop?

旧城冷巷雨未停 提交于 2021-02-07 05:00:33

问题


I have a for loop nested in another for loop. How can I make it so that when somethign happens in the inner loop, we exit and jump to the next iteration of the outer loop?

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
        }
    }
}

回答1:


@flodel has the correct answer for this, which is to use break rather than next. Unfortunately, the example in that answer would give the same result whichever control flow construct was used.

I'm adding the following example just to make clear how the behavior of the two constructs differs.

## 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   ##



回答2:


I think you want to use break so R will stop looping through your inner for loop, hence proceed to the next iteration of your outer for loop:

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


来源:https://stackoverflow.com/questions/10786940/how-to-jump-to-next-top-level-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!