Logique vectorisée - Partie 2
Fait partie de la section Fondamentaux du Journey R de Coddy — leçon 21 sur 78.
Tout comme AND et OR ont des versions vectorisées, l'opérateur NOT fonctionne également élément par élément sur les vecteurs. Lorsque vous appliquez ! à un vecteur de valeurs logiques, il inverse chaque élément individuellement.
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUEChaque TRUE devient FALSE, et chaque FALSE devient TRUE. Ceci est particulièrement utile lorsque vous voulez trouver des éléments qui ne remplissent pas une certaine condition :
temperatures <- c(18, 25, 30, 15, 22)
# Trouver les températures qui ne sont PAS supérieures à 20
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSEVous pouvez combiner le NOT vectorisé avec & et | pour construire des filtres complexes :
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# Peut participer si : âge >= 18 OU (moins de 18 ans ET a l'autorisation)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUERappelez-vous : utilisez les opérateurs simples &, | et ! lorsque vous travaillez avec des vecteurs, et les doubles &&, || lors de la comparaison de valeurs uniques.
Défi
FacileUtilisez l'opérateur vectorisé NOT (!) ainsi que & et | pour créer des conditions logiques complexes élément par élément.
Les vecteurs suivants vous sont fournis :
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)Utilisez des opérateurs logiques vectorisés, y compris l'opérateur NOT, pour créer les vecteurs logiques suivants :
- Créez un vecteur appelé
failedqui stockeTRUEpour chaque score qui n'est PAS supérieur ou égal à 60 - Créez un vecteur appelé
absentqui stocke l'opposé deattended(inversez chaque valeur) - Créez un vecteur appelé
at_riskqui stockeTRUEpour chaque étudiant qui n'a PAS assisté OU n'a PAS rendu ses devoirs - Créez un vecteur appelé
passing_but_absentqui stockeTRUEpour chaque étudiant qui a un score supérieur ou égal à 60 ET n'a PAS assisté - Créez un vecteur appelé
needs_supportqui stockeTRUEpour chaque étudiant où : (le score est inférieur à 50) OU (n'a PAS assisté ET n'a PAS rendu ses devoirs)
Utilisez la fonction print() pour afficher failed, absent, at_risk, passing_but_absent et needs_support dans cet ordre exact.
Aide-mémoire
L'opérateur NOT (!) fonctionne par élément sur les vecteurs, inversant chaque valeur logique individuellement :
passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed # FALSE TRUE FALSE TRUEUtilisez ! pour trouver les éléments qui ne remplissent pas une condition :
temperatures <- c(18, 25, 30, 15, 22)
!(temperatures > 20) # TRUE FALSE FALSE TRUE FALSECombinez le NOT vectorisé avec & et | pour des filtres complexes :
ages <- c(16, 25, 18, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)
# Can participate if: age >= 18 OR (under 18 AND has permission)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUERappel : utilisez les opérateurs simples &, | et ! pour les vecteurs ; utilisez les opérateurs doubles &&, || pour les valeurs uniques.
Essayez vous-même
# Vecteurs donnés
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
# TODO: Écrivez votre code ci-dessous
# 1. Créer 'failed' - TRUE pour les scores qui ne sont PAS >= 60
# 2. Créer 'absent' - l'opposé de attended
# 3. Créer 'at_risk' - PAS attended OU PAS submitted homework
# 4. Créer 'passing_but_absent' - score >= 60 ET PAS attended
# 5. Créer 'needs_support' - (score < 50) OU (PAS attended ET PAS submitted homework)
# Afficher les résultats
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)Cette 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 FizzBuzz2Variables 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