@flodel tiene la respuesta correcta para esto, que es usar break
en lugar de next
. Desafortunadamente, el ejemplo en esa respuesta daría el mismo resultado independientemente de la construcción de flujo de control utilizada.
Voy a agregar el siguiente ejemplo para aclarar cómo difiere el comportamiento de las dos construcciones.
## 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 ##
Ver: '' next' y break', pero aquí yo preferiría tener un bucle interno como: 'for (j en 1000: 970) {...}' – daroczig