Boucle R While avec exemples de programmation
⚡ Résumé intelligent
La boucle while en langage R répète un bloc de code tant que sa condition reste vraie. La condition est testée avant chaque itération ; le corps de la boucle peut donc ne jamais être exécuté, et un élément de celle-ci doit finir par rendre la condition fausse.

Boucle While dans la programmation R
A boucle tout en En R, une boucle `reply` répète un bloc de code tant que sa condition reste vraie. La condition est ensuite testée. avant à chaque itération, une boucle while peut donc s'exécuter zéro fois si la condition est FAUSSE dès le départ.
Syntaxe de la boucle While dans R
Voici la syntaxe de la programmation While Loop dans R :
while (condition) {
Exp
}
Organigramme de la boucle R While

NoteUn élément de la boucle doit finir par rendre la condition FAUSSE. Sinon, la boucle s'exécute indéfiniment et vous devez l'interrompre avec Échap ou Ctrl+C.
Boucle while vs boucle for vs boucle repeat en R
R propose trois toilettesping le choix entre ces constructions dépend de votre capacité à savoir à l'avance combien d'itérations sont nécessaires.
| Critères | tout en | pour | répéter |
|---|---|---|---|
| Nombre d'itérations | Inconnu à l'avance | Connu à l'avance | Inconnu à l'avance |
| Condition testée | Avant chaque passage | La séquence est épuisée. | Jamais, vous ne devez appeler la pause |
| Courses minimales | Zero | Zero | Un |
| Utilisation typique | Convergence vers un seuil | Parcourir un vecteur ou une liste | logique de type « faire-tant-que » |
| Syntaxe | tant que (cond) { } | pour (i dans v) { } | répéter { … pause } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
L'exemple boursier ci-dessus convient parfaitement à ceci : vous ne pouvez pas savoir à l'avance combien de tirages aléatoires seront nécessaires avant que le prix ne tombe à 45.
Boucle while en R : exemples
Exemple 1
Commencez par le plus simple possible Programmation R Par exemple, vous créez un compteur et vous l'incrémentez de 1 à chaque itération. La boucle doit pouvoir s'arrêter ; la condition indique donc explicitement à R de s'arrêter dès que la variable dépasse 10.
Note: Si vous voulez voir la valeur actuelle de la boucle, vous devez envelopper la variable dans la fonction print().
#Create a variable with value 1 begin <- 1 #Create the loop while (begin <= 10){ #See which loop we are on cat('This is loop number', begin, '\n') #add 1 to the variable begin after each loop begin <- begin+1 print(begin) }
Sortie :
## This is loop number 1[1] 2 ## This is loop number 2[1] 3 ## This is loop number 3[1] 4 ## This is loop number 4[1] 5 ## This is loop number 5[1] 6 ## This is loop number 6[1] 7 ## This is loop number 7[1] 8 ## This is loop number 8[1] 9 ## This is loop number 9[1] 10 ## This is loop number 10[1] 11
Exemple 2
Supposons que vous ayez acheté une action à 50 dollars. Si son prix chute à 45 ou moins, vous souhaitez la vendre à découvert ; sinon, vous la conservez. À chaque itération de la boucle, le prix varie aléatoirement de 10 maximum dans un sens ou dans l’autre autour de 50.
set.seed(123) # Set variable stock and price stock <- 50 price <- 50 # Loop variable counts the number of loops loop <- 1 # Set the while statement while (price > 45){ # Create a random price between 40 and 60 price <- stock + sample(-10:10, 1) # Count the number of loop loop <- loop + 1 # Print the number of loop print(loop) }
Sortie :
## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7
cat('it took',loop,'loop before we short the price. The lowest price is',price)
Sortie :
## it took 7 loop before we short the price. The lowest price is 40
Comment utiliser break et next dans une boucle while ?
Deux mots-clés modifient le déroulement normal de n'importe quelle boucle R.
- pause sort immédiatement de la boucle, ignorerping chaque itération restante.
- next abandonne uniquement l'itération en cours et passe directement au test de condition suivant.
# break: stop as soon as a condition is met i <- 1 while (i <= 100) { if (i * i > 50) { cat('First square above 50 is', i * i, '\n') break } i <- i + 1 } # next: skip the even numbers i <- 0 while (i < 10) { i <- i + 1 if (i %% 2 == 0) next print(i) }
Un piège à connaître. Dans une boucle while, next revient au test de condition sans L'exécution de tout ce qui suit pose problème. Si votre compteur est incrémenté à la fin du corps de la fonction, la fonction suivante ignore cette incrémentation et la boucle se bloque indéfiniment. C'est pourquoi le deuxième exemple s'incrémente. avant la déclaration suivante plutôt que celle qui la suit.
Erreurs courantes dans les boucles While et boucles infinies
Quatre erreurs sont responsables de la quasi-totalité des échecs de la boucle while.
- Le compteur n'est jamais mis à jour. Oublier l'incrément laisse la condition définitivement VRAIE. Appuyez sur Échap dans RStudio ou sur Ctrl+C dans un terminal pour interrompre.
- La condition renvoie NA. Si une valeur du test est manquante (NA), R s'arrête avec le message « valeur manquante là où TRUE/FALSE est requis ». Utilisez `is.na()` ou `isTRUE()` pour gérer ce cas.
- La condition comporte plus d'un élément. Depuis R 4.2, une condition de longueur supérieure à un est considérée comme une erreur et non plus comme un avertissement. Il faut l'encapsuler dans `any()` ou `all()`.
- La comparaison des nombres à virgule flottante ne devient jamais FAUSSE. La boucle while (x != 0.3) peut se répéter indéfiniment car 0.1 + 0.2 n'est pas exactement égal à 0.3. Il est préférable de comparer avec une tolérance, en utilisant abs(x – 0.3) > 1e-8.
# Safety valve: cap the number of iterations iter <- 0 while (price > 45 && iter < 1000) { price <- stock + sample(-10:10, 1) iter <- iter + 1 }
L'ajout d'un nombre maximal d'itérations constitue une assurance peu coûteuse dans toute boucle dont la sortie dépend de données aléatoires ou externes.
