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")) { } |

