IF, ELSE, ELSE IF Instruction dans R
⚡ Résumé intelligent
Les instructions `if else` et `else if` en R déterminent le bloc de code à exécuter en fonction d'une condition logique. Ce guide aborde la structure à deux branches, les chaînes à plusieurs branches, la fonction vectorisée `ifelse()` et `switch()` pour les correspondances exactes.

L'instruction if else en R
An si autre Cette instruction exécute un bloc de code lorsqu'une condition est VRAIE et un autre lorsqu'elle est FAUSSE. En R, la syntaxe est la suivante :
if (condition) { Expr1 } else { Expr2 }
Vérifiez si la variable nommée « quantity » est supérieure à 20. Si c'est le cas, le code affiche « Vous avez vendu beaucoup ! », sinon il affiche « Pas assez pour aujourd'hui ».
# Create vector quantity quantity <- 25 # Set the if-else statement if (quantity > 20) { print('You sold a lot!') } else { print('Not enough for today') }
Sortie :
## [1] "You sold a lot!"
NoteL'indentation n'a aucune incidence sur l'exécution du code par R, mais une indentation cohérente garantit la lisibilité d'une longue suite de conditions. Notez également que l'accolade fermante et le mot-clé `else` doivent figurer sur la même ligne ; sinon, R considère le bloc `if` comme terminé et génère une erreur.
L'instruction else if en R
Enchaîner d'autres tests avec Sinon siR ne possède pas de mot-clé elif, c'est-à-dire PythonEn R, vous écrivez les deux mots séparément et vous pouvez ajouter autant de branches que nécessaire. La syntaxe est la suivante :
if (condition1) { expr1 } else if (condition2) { expr2 } else if (condition3) { expr3 } else { expr4 }
Supposons que vous souhaitiez trois résultats : moins de 20 impressions « Pas assez pour aujourd’hui », entre 20 et 30 impressions « Journée moyenne », et plus de 30 impressions « Quelle belle journée ! ».
Vous pouvez essayer de modifier le montant de la quantité.
# Create the variable quantity quantity <- 10 # Create multiple condition statement if (quantity < 20) { print('Not enough for today') } else if (quantity >= 20 & quantity <= 30) { print('Average day') } else { print('What a great day!') }
Sortie :
## [1] "Not enough for today"
Exemple 2:
Les taux de TVA varient selon la catégorie de produits. Prenons l'exemple de trois catégories, chacune avec son propre taux :
| Catégories | Produits | T.V.A. |
|---|---|---|
| A | Livre, magazine, journal, etc. | 8% |
| B | Légumes, viandes, boissons, etc. | 10 % |
| C | Tee-shirt, jean, pantalon, etc. | 20 % |
Une clause else if applique le taux correct à tout ce que le client a acheté :
category <- 'A' price <- 10 if (category =='A'){ cat('A vat rate of 8% is applied.','The total price is',price *1.08) } else if (category =='B'){ cat('A vat rate of 10% is applied.','The total price is',price *1.10) } else { cat('A vat rate of 20% is applied.','The total price is',price *1.20) }
Sortie :
## A vat rate of 8% is applied. The total price is 10.8
La fonction vectorisée ifelse() en R
L'instruction `if` ne traite qu'une seule valeur. Si on lui fournit un vecteur, R 4.2 et versions ultérieures génèrent une erreur, car la condition doit être soit VRAI, soit FAUX. La fonction `ifelse()` résout ce problème en testant chaque élément simultanément et en renvoyant un vecteur de même longueur.
quantities <- c(10, 25, 40, 18) # if cannot do this result <- ifelse(quantities > 20, 'You sold a lot!', 'Not enough for today') result
Sortie :
## [1] "Not enough for today" "You sold a lot!" "You sold a lot!" ## [4] "Not enough for today"
Les trois arguments sont le test, la valeur renvoyée lorsque le test est VRAI et la valeur renvoyée lorsqu'il est FAUX. Ces trois arguments sont réutilisés pour obtenir la même longueur.
L'imbrication de ifelse() reproduit une chaîne else if sur l'ensemble d'un vecteur :
ifelse(quantities < 20, 'Not enough for today', ifelse(quantities <= 30, 'Average day', 'What a great day!'))
Deux limites sont importantes à connaître. La fonction `ifelse()` supprime du résultat des attributs tels que les niveaux de facteur et le type `Date`, et elle évalue les deux branches pour chaque élément ; elle est donc inefficace lorsqu'une branche est coûteuse. L'alternative dplyr cas_quand() évite complètement l'imbrication et préserve l'intégrité des types :
library(dplyr) case_when( quantities < 20 ~ 'Not enough for today', quantities <= 30 ~ 'Average day', TRUE ~ 'What a great day!' )
L'instruction switch() en R
Lorsque chaque branche teste l'égalité de la même variable, une longue chaîne de conditions « else if » devient difficile à lire. La fonction switch() la remplace par une simple recherche.
category <- 'A' price <- 10 vat <- switch(category, 'A' = 1.08, 'B' = 1.10, 'C' = 1.20, 1.20) # the unnamed last value is the default cat('The total price is', price * vat)
Son comportement est régi par trois règles :
- Avec un argument de type caractère, switch() effectue une correspondance exacte du nom. Il n'y a pas de correspondance partielle ni de correspondance de motif.
- Un élément final anonyme sert de valeur par défaut. Sans lui, une valeur non appariée renvoie NULL de manière invisible, ce qui est une source fréquente de bogues silencieux.
- Avec un argument entier, switch() sélectionne plutôt par position : switch(2, « a », « b », « c ») renvoie « b ».
Utilisez `switch()` pour les correspondances exactes avec un ensemble fixe de valeurs, et réservez `else if` aux plages et aux conditions composées, que `switch()` ne peut pas exprimer. Pour appliquer une condition de manière répétée à une séquence, combinez-la avec un `else if`. pour la boucle boucle tout en.
logique Operators dans les conditions R
Les opérateurs qui constituent une condition se comportent différemment les uns des autres, et cette différence est importante.
| Opérateur | Sens | Utilisez-le dans |
|---|---|---|
| & | Élément par élément ET | ifelse(), filter(), vecteurs entiers |
| && | ET à valeur unique, courts-circuits | si () et tant que () |
| | | Élément par élément OU | ifelse(), filter(), vecteurs entiers |
| || | OU à valeur unique, courts-circuits | si () et tant que () |
| ! | NON, nie le test | de chez vous |
| %dans% | La valeur fait-elle partie de cet ensemble ? | Remplace les longues chaînes de blocs opératoires |
Pourquoi le court-circuit est important. La double formulation s'arrête dès que la réponse est établie ; ainsi, le membre de droite n'est jamais évalué lorsque le membre de gauche détermine déjà le résultat. Cela permet d'écrire sans risque une clause de garde :
# Safe: length() is checked before x[1] is touched if (length(x) > 0 && x[1] > 10) print('ok')
Comparaison avec plusieurs valeurs. Privilégiez l'utilisation de %in% plutôt que l'enchaînement de tests d'égalité ; c'est à la fois plus court et moins sujet aux erreurs de frappe :
if (category %in% c('A', 'B')) { print('Reduced VAT rate applies') }
Dernier avertissement : le signe égal seul attribue une valeur, il ne compare pas. Utilisez toujours == à l’intérieur d’une condition.
Instructions conditionnelles en R : Guide de référence rapide
Chaque élément utilisé dans ce tutoriel est listé ci-dessous :
| Objectif | Code |
|---|---|
| Deux succursales |
if (cond) { a } else { b } |
| Branches multiples |
if (c1) { a } else if (c2) { b } else { c } |
| Condition vectorisée |
ifelse(test, yes, no)
|
| Multibranche sur un vecteur |
case_when(c1 ~ a, c2 ~ b, TRUE ~ c)
|
| Recherche de correspondance exacte |
switch(x, "A" = 1, "B" = 2, 0) |
| Test d'appartenance |
if (x %in% c("A", "B")) { } |

