16

for別のループにネストされたループがありforます。内側のループで何かが発生したときに、終了して外側のループの次の繰り返しにジャンプするようにするにはどうすればよいでしょうか?

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

2 に答える 2

17

@flodel にはこれに対する正しい答えがあります。これは、breakではなく使用することですnext。残念ながら、その回答の例では、どの制御フロー構造が使用されても同じ結果が得られます。

2 つのコンストラクトの動作の違いを明確にするために、次の例を追加します。

## 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   ##
于 2012-05-28T19:20:30.543 に答える
10

breakR が内側のループのループを停止するように使用したいので、外側のループ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
于 2012-05-28T18:58:50.720 に答える