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.

  • 🔀 Syntaxe de base : if (condition) { } else { } exécute une branche lorsque le test est VRAI et l'autre lorsqu'il est FAUX.
  • 🔗 Plusieurs succursales : En R, « else if » est écrit en deux mots distincts ; il n'existe pas de mot-clé « elif » comme dans… Python.
  • ⚠️ Soins des limites : Utilisez les opérateurs « supérieur ou égal » et « inférieur ou égal » afin qu'aucune valeur ne passe inaperçue entre les branches.
  • | Forme vectorisée : ifelse(test, yes, no) évalue un vecteur entier en une seule fois, ce que if ne peut pas faire.
  • 🇧🇷 Correspondance exacte : switch() remplace une longue chaîne de tests d'égalité par une seule recherche.
  • 🧮 OperaChoix du tore : L'esperluette simple fonctionne élément par élément tandis que la forme double sert à indiquer un seul VRAI ou FAUX à l'intérieur d'une instruction if.

Instruction If Else Else If en R

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
}

Si autrement, déclaration

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

FAQ

La fonction `if` gère une seule valeur (VRAI ou FAUX) et détermine quel bloc de code est exécuté. `ifelse()` est une fonction vectorisée qui teste chaque élément d'un vecteur et renvoie un vecteur de résultats.

Utilisez la forme double à l'intérieur des instructions `if` et `while`, où la condition doit être unique et l'auto-circuitage protège le membre de droite. Utilisez la forme simple pour les tests élément par élément sur des vecteurs entiers.

Depuis R 4.2, une condition if doit prendre exactement une valeur VRAIE ou FAUX ; les vecteurs plus longs génèrent désormais une erreur plutôt qu’un avertissement. Utilisez ifelse(), any() ou all() selon ce que vous vouliez dire.

Les conditions déterminent les règles d'ingénierie des fonctionnalités, arrêt précoceping Des vérifications sont effectuées pendant l'entraînement, ainsi que des décisions de seuillage sur la sortie du modèle. Les formes vectorisées telles que `case_when()` sont préférables car elles s'adaptent à des ensembles de données entiers.

Oui. Les assistants IA peuvent repérer les anomalies, comme une valeur limite présente dans chaque branche ou l'utilisation d'un seul signe égal pour la comparaison. Testez vous-même la chaîne corrigée sur les valeurs limites.

Résumez cet article avec :