R Язык: как перейти к следующей петле верхнего уровня?

Существует 2 уровня цикла. Как перейти к следующему циклу верхнего уровня, когда что-то произойдет на уровне sub цикла?

Спасибо большое!

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

Вы хотите 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
....

Ответ 2

@flodel имеет правильный ответ для этого, который должен использовать break, а не next. К сожалению, пример в этом ответе даст тот же результат в зависимости от того, какая конструкция управления потоком была использована.

Я добавляю следующий пример, просто чтобы понять, как отличается поведение двух конструкций.

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

Ответ 3

Я думаю, вы хотите использовать break, чтобы R остановил цикл через ваш внутренний цикл 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