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.

  • (I.e. Syntaxe de base : while (condition) { expression } teste d'abord la condition et exécute le corps uniquement si elle est évaluée à TRUE.
  • ⚠️ Règle de résiliation : Une instruction à l'intérieur du corps de la fonction doit modifier la condition, sinon la boucle ne se termine jamais.
  • (I.e. Contre-motif : Initialisez une variable avant la boucle et incrémentez-la à l'intérieur ; c'est la méthode de comptage standard.
  • (I.e. Contrôle de flux: break sort immédiatement de la boucle et next passe à l'itération suivante.
  • (I.e. Répéter l'alternative : La boucle repeat s'exécute inconditionnellement et repose entièrement sur break, ce qui convient à la logique de type do-while.
  • (I.e. Quand choisir : Utilisez while lorsque le nombre d'itérations est inconnu à l'avance, et for lorsqu'il est fixe.

Boucle while dans R

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

Organigramme de la boucle R While
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.

FAQ

Une boucle while teste sa condition avant la première itération, elle peut donc s'exécuter zéro fois. Une boucle repeat, quant à elle, n'a pas de condition et s'exécute toujours au moins une fois, ne s'arrêtant que lorsqu'elle rencontre une instruction break.

Appuyez sur Échap dans RStudio ou sur Ctrl+C dans un terminal pour interrompre l'exécution. Pour éviter cela, assurez-vous qu'une instruction à l'intérieur du corps de la fonction modifie la condition et ajoutez un compteur d'itérations maximal.

Utilisez `while` lorsque le nombre d'itérations dépend d'un résultat calculé à l'intérieur de la boucle, par exemple lorsqu'une valeur dépasse un seuil. Utilisez `for` lorsque la séquence est connue avant le début de la boucle.

Les algorithmes itératifs tels que la descente de gradient, les k-moyennes et l'espérance-maximisation s'exécutent tous jusqu'à convergence plutôt que pour un nombre fixe, ce qui correspond exactement au modèle while.

Oui. Les assistants IA peuvent détecter une mise à jour de compteur manquante ou une condition qui ne peut jamais passer à FAUX. Ajoutez toujours une instruction d'impression ou une limite d'itérations pour confirmer le diagnostic sur vos propres données.

Résumez cet article avec :