L'opérateur %in%
Fait partie de la section Fondamentaux du Journey R de Coddy — leçon 70 sur 78.
Parfois, vous devez vérifier si des valeurs existent dans un vecteur. L'opérateur %in% offre un moyen simple de tester l'appartenance, renvoyant TRUE pour chaque élément correspondant et FALSE sinon.
La syntaxe de base vérifie si les valeurs à gauche existent dans le vecteur à droite :
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Résultat :
[1] TRUEVous pouvez également vérifier plusieurs valeurs à la fois. L'opérateur renvoie un vecteur logique avec un résultat pour chaque valeur testée :
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Sortie :
[1] TRUE FALSE TRUECela rend %in% parfait pour le filtrage. Combiné avec l'indexation logique, vous pouvez extraire des éléments qui appartiennent à un ensemble spécifique :
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Sortie :
[1] 1 3 2L'opérateur %in% est particulièrement utile lors de la validation des entrées utilisateur ou du filtrage de données basées sur une liste prédéfinie de valeurs acceptables.
Défi
FacileVous recevrez trois lignes d'entrée :
- Une liste d'articles séparés par des virgules dans votre inventaire (par exemple,
apple,banana,milk,bread,eggs,cheese) - Une liste d'articles séparés par des virgules sur votre liste de courses (par exemple,
milk,butter,eggs,juice) - Une liste d'articles séparés par des virgules qui sont en promotion (par exemple,
bread,juice,yogurt)
En utilisant l'opérateur %in% :
- Créez des vecteurs de caractères à partir de chaque entrée séparée par des virgules
- Vérifiez quels articles de la liste de courses vous avez déjà dans votre inventaire et affichez le résultat du vecteur logique
- Filtrez et affichez les articles de la liste de courses que vous n'avez PAS dans votre inventaire (articles que vous devez acheter)
- Filtrez et affichez les articles que vous devez acheter et qui sont également en promotion
Par exemple, si les entrées sont :
apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butterLa sortie devrait être :
[1] TRUE FALSE TRUE FALSE TRUE
[1] "butter" "juice"
[1] "butter" "juice"Explication :
- Liste de courses vérifiée par rapport à l'inventaire : milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
- Articles PAS dans l'inventaire (à acheter) : butter, juice
- Articles à acheter qui sont en promotion : butter et juice sont tous deux sur la liste des promotions
Utilisez l'opérateur ! avec %in% pour trouver les articles qui ne sont PAS dans un vecteur.
Aide-mémoire
L'opérateur %in% vérifie si des valeurs existent dans un vecteur, en renvoyant TRUE ou FALSE :
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Sortie :
[1] TRUEVérifiez plusieurs valeurs à la fois pour obtenir un vecteur logique :
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Sortie :
[1] TRUE FALSE TRUEUtilisez %in% avec l'indexation logique pour filtrer les éléments :
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Sortie :
[1] 1 3 2Utilisez ! avec %in% pour trouver les éléments qui ne sont PAS dans un vecteur :
items <- c("milk", "butter", "eggs")
inventory <- c("milk", "eggs")
print(items[!items %in% inventory])Sortie :
[1] "butter"Essayez vous-même
# Lire l'entrée
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: Écrivez votre code ci-dessous
# 1. Créer des vecteurs de caractères à partir de chaque entrée séparée par des virgules en utilisant strsplit()
# 2. Vérifier quels articles de la liste de courses vous avez déjà en inventaire (utiliser %in%)
# 3. Filtrer les articles de la liste de courses que vous n'avez PAS en inventaire (utiliser ! avec %in%)
# 4. Filtrer les articles que vous devez acheter qui sont également en soldeCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
4Opérateurs - Partie 2
Opérateurs logiques (AND, OR)Opérateurs logiques - Partie 2 (NOT)Récapitulatif - Logique simpleLogique vectorisée - Partie 1Logique vectorisée - Partie 27Calculateur de partage d'addition
Message de bienvenueRécupérer la saisie utilisateur10FizzBuzz avec une variante
Présentation du jeuLa fonction FizzBuzz13Vecteurs avancés
Découpage et indexation de vecteursIndexation logiqueArithmétique des vecteurs et recyclageL'opérateur %in%2Variables et types de données
Type de données numériqueType de données entierType de données caractèreType de données logiqueVérification des types de donnéesConventions de nommageValeurs manquantes : NARécapitulatif - Création de variables8Boucles
Boucle ForBoucle WhileBreakSuivant (Continue)Récapitulatif - FactorielleGénération de séquences (seq, :)Boucles imbriquéesRécapitulatif - Saisie dynamique3Opérateurs, partie 1
Opérateurs arithmétiquesDivision entière et moduloOpérateurs d'affectationRécapitulatif - Mathématiques simplesOpérateurs de comparaison6Entrées/Sorties de base
Affichage avec PrintCat pour l'affichageAffichage avec des variablesLire l'entrée avec readline()Bases de la conversion de typesRécapitulatif - Calculateur d'âgeRécapitulatif - Vrai ou Faux9Fonctions
Déclarer une fonctionArguments de fonctionValeurs de retourRécapitulatif - Fonction SigmaRécapitulatif - Fonction de validationValeurs de paramètres par défaut