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