En programmation, les structures conditionnelles permettent d'exécuter un bloc de code précis uniquement si une condition logique donnée est vérifiée.
En R, il existe deux approches fondamentales à bien distinguer :
1. La structure classique if ... else : conçue pour évaluer une condition sur une valeur unique (scalaire).
2. La fonction ifelse() : conçue pour évaluer une condition sur un vecteur entier, élément par élément.
1. La structure classique : if, else if et else#
La syntaxe d'un bloc conditionnel en R s'écrit avec des parenthèses pour la condition et des accolades {} pour les instructions :
note <- 14
if (note >= 16) {
print("Mention Très Bien")
} else if (note >= 12) {
print("Mention Bien ou Assez Bien")
} else if (note >= 10) {
print("Admis sans mention")
} else {
print("Ajourné")
}
Sortie :
[!WARNING] Attention à l'emplacement du
else:
En R, le mot-cléelsedoit obligatoirement se trouver sur la même ligne que l'accolade fermante}du bloc précédent :
2. Opérateurs logiques : & / | vs && / ||#
R possède deux jeux d'opérateurs logiques :
| Opérateur | Comportement | Usage typique |
|---|---|---|
& et | |
Vectorisés : Évalue la condition sur tous les éléments d'un vecteur. | Dans les filtres de données (df[x > 0 & y < 10, ]). |
&& et || |
Scalaires à court-circuit : N'évalue que le premier élément. | Dans les blocs de contrôle if (cond1 && cond2). |
3. La condition vectorisée : ifelse()#
C'est l'une des fonctions les plus fréquemment utilisées en analyse de données. Elle prend trois arguments :
1. Une condition vectorielle.
2. La valeur à renvoyer si la condition est TRUE.
3. La valeur à renvoyer si la condition est FALSE.
notes_classe <- c(8, 14, 11, 7, 19, 10)
# Évaluation instantanée sur tous les élèves
resultats <- ifelse(notes_classe >= 10, "Admis", "Recalé")
print(resultats)
Sortie :
On peut également imbriquer plusieurs ifelse() pour gérer plus de deux catégories :
statuts <- ifelse(notes_classe >= 16, "Excellent",
ifelse(notes_classe >= 10, "Moyen", "Insuffisant"))
Mise en pratique#
- Déclarez une variable
solde <- 1250. - Écrivez un bloc
if / elsequi affiche"Solde créditeur"sisolde > 0,"Solde nul"sisolde == 0, et"Découvert autorisé"sinon. - Soit le vecteur
temperatures <- c(12, -3, 24, 0, -8, 31). Utilisez la fonction vectoriséeifelse()pour créer un vecteurclimatvalant"Gel"si la température est négative ou nulle, et"Doux"sinon.
Commentaires