J'ai une boucle for
imbriquée dans une autre boucle for
. Comment puis-je faire en sorte que lorsque quelque chose se passe dans la boucle interne, nous sortons et sautons à la prochaine itération de la boucle externe?
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
}
}
}
@flodel a la bonne réponse à cela, qui est d'utiliser break
plutôt que next
. Malheureusement, l'exemple de cette réponse donnerait le même résultat, quelle que soit la construction de flux de contrôle utilisée.
J'ajoute l'exemple suivant juste pour montrer clairement comment le comportement des deux constructions diffère.
## 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 ##
Je pense que vous voulez utiliser break
pour que R arrête de parcourir votre boucle intérieure for
, donc passez à la prochaine itération de votre boucle externe 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