Les boucles en R : for, while et bonnes pratiques d'optimisation

@joekakone

Joseph Konka @joekakone

03/03/2026 · 6 min

Apprenez à maîtriser les boucles for et while en R, découvrez les instructions break et next, et adoptez les bonnes pratiques de pré-allocation mémoire.

Les boucles permettent d'exécuter un ensemble d'instructions de manière répétée. En R, comme dans la plupart des langages, on utilise principalement deux types de boucles : * La boucle for : lorsque le nombre d'itérations est connu à l'avance. * La boucle while : lorsque l'itération doit continuer tant qu'une condition reste vraie.


1. La boucle for#

La syntaxe d'une boucle for itère sur chaque élément d'un vecteur ou d'une séquence :

# Itérer sur les éléments d'un vecteur
prenoms <- c("Alice", "Bob", "Charlie")

for (p in prenoms) {
  print(paste("Bonjour", p))
}

Sortie :

[1] "Bonjour Alice"
[1] "Bonjour Bob"
[1] "Bonjour Charlie"

Itérer par les indices avec seq_along()#

Pour modifier un vecteur en place ou accéder à plusieurs variables en parallèle, on itère sur les indices numériques :

valeurs <- c(10, 20, 30, 40)

for (i in seq_along(valeurs)) {
  print(paste("À l'indice", i, ", la valeur est", valeurs[i]))
}

[!TIP] Pourquoi préférer seq_along(x) à 1:length(x) ?
Si votre vecteur x est vide (length(x) == 0), l'écriture 1:length(x) va générer la séquence 1:0 (deux itérations indésirables qui provoquent un bug). La fonction seq_along(x) gère parfaitement les vecteurs de longueur nulle sans générer d'erreur.


2. La boucle while#

La boucle while évalue sa condition avant chaque tour et s'arrête dès que la condition devient fausse :

# Exemple d'accumulation
solde <- 1000
interet <- 0.05
annee <- 0

while (solde < 1500) {
  solde <- solde * (1 + interet)
  annee <- annee + 1
}

print(paste("Objectif atteint en", annee, "ans avec un solde de", round(solde, 2), "€"))

Sortie :

[1] "Objectif atteint en 9 ans avec un solde de 1551.33 €"


3. Contrôle des boucles : break et next#

  • break : Interrompt immédiatement la boucle et passe à la suite du script.
  • next : Saute directement à l'itération suivante sans exécuter le reste du bloc (équivalent de continue en Python ou en C).
for (i in 1:10) {
  # Sauter les nombres pairs
  if (i %% 2 == 0) {
    next
  }

  # Arrêter la boucle dès qu'on dépasse 7
  if (i > 7) {
    break
  }

  print(i) # Affichera 1, 3, 5, 7
}

4. La règle d'or en R : La pré-allocation de mémoire#

[!WARNING] Le piège fatal de la lenteur en R : Faire grandir un objet dynamiquement
Dans beaucoup de langages, on a tendance à écrire :

# MAUVAISE PRATIQUE (Très lent pour des milliers d'itérations !)
resultat <- c()
for (i in 1:10000) {
  resultat <- c(resultat, i^2) # R réalloue toute la mémoire à chaque tour
}
BONNE PRATIQUE : Pré-allouer la taille finale à l'avance :
# CORRECT ET RAPIDE
resultat <- numeric(10000) # Vecteur de 10 000 zéros alloué en une fois
for (i in 1:10000) {
  resultat[i] <- i^2
}

Mieux encore : en R, cette opération s'écrit en une seule ligne vectorisée sans aucune boucle :

# LA VOIE IDIOMATIQUE EN R (Instantanné)
resultat <- (1:10000)^2


Mise en pratique#

  1. Écrivez une boucle for qui calcule la factorielle d'un entier \(n = 6\) (\(6! = 6 \times 5 \times 4 \times 3 \times 2 \times 1\)).
  2. À l'aide d'une boucle while, simulez le lancer répété d'un dé à 6 faces (sample(1:6, 1)) et arrêtez-vous dès que vous obtenez le chiffre 6. Affichez le nombre de lancers nécessaires.
  3. Soit un vecteur de 5 nombres aléatoires : notes <- c(12, 8, 15, 6, 14). Écrivez une boucle qui affiche chaque note accompagnée de la mention "Admis" ou "Ajourné".

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue