@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 ##
參見:'next'和'break',但在這裏,我寧願有一個內部循環,如:'爲(1000記者:970){...}' – daroczig