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 :