Rechercher dans les chaînes
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 4 sur 64.
grepl(pattern, x) renvoie TRUE pour chaque élément de x qui contient pattern. Ajoutez fixed = TRUE pour rechercher les caractères exacts. Sans cela, le motif est une expression régulière, dans laquelle des caractères tels que . et ? ont des significations spéciales.
files <- c("report.csv", "photo.png", "data.csv")
print(grepl(".csv", files, fixed = TRUE))
print(files[grepl(".csv", files, fixed = TRUE)])Sortie :
[1] TRUE FALSE TRUE
[1] "report.csv" "data.csv" startsWith(x, prefix) et endsWith(x, suffix) vérifient uniquement le début ou la fin de chaque chaîne. Toutes ces recherches sont sensibles à la casse ; utilisez donc d’abord tolower() pour ignorer la casse.
names <- c("Anna", "bob", "Andre")
print(startsWith(names, "An"))
print(startsWith(tolower(names), "b"))Sortie :
[1] TRUE FALSE TRUE
[1] FALSE TRUE FALSELes résultats sont des vecteurs logiques : sum() compte les correspondances et any() vérifie qu’il y en a au moins une :
emails <- c("a@x.com", "bad-address", "c@y.org")
valid <- grepl("@", emails, fixed = TRUE)
print(sum(valid))
print(any(!valid))Résultat :
[1] 2
[1] TRUEgrep(pattern, x) renvoie les positions des éléments correspondants, et grep(pattern, x, value = TRUE) renvoie les éléments eux-mêmes :
files <- c("a.csv", "b.txt", "c.csv")
print(grep(".csv", files, fixed = TRUE))
print(grep(".csv", files, fixed = TRUE, value = TRUE))Sortie :
[1] 1 3
[1] "a.csv" "c.csv"Défi
FacileComplétez count_domain(emails, domain). Renvoyez le nombre d’adresses dans emails qui se terminent par @ suivi de domain. Ignorez la casse : CY@CODDY.TECH compte pour le domaine coddy.tech.
Le code fourni lit les adresses sous forme de ligne séparée par des virgules, puis le domaine, et affiche le nombre renvoyé.
Essayez vous-même
count_domain <- function(emails, domain) {
# Écrivez votre code ici
0
}
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
emails <- strsplit(input[1], ",")[[1]]
cat(count_domain(emails, input[2]), sep = "\n")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes en profondeur
Sous-chaînes avec substr()Mise en forme avec sprintf()Scinder et joindreRechercher dans les chaînesRemplacer du texteRécapitulatif - Créateur de nom d'utilisateur4Matrices
Créer des matricesIndexer des matricesRécapitulatifs des lignes et des colonnesArithmétique matricielleRécapitulatif - Plan de salle7La famille Apply
lapply et sapplyMap et mapplyFilter et FindReduceRécapitulatif - Pipeline de données10Structures de contrôle avancées
La fonction switch()ifelse() vectorisérepeat et breakFonctions récursivesRécapitulatif – Classificateur de notes2Recherches par clé-valeur
Recherches dans des vecteurs nommésVérifier les clésAjouter et supprimer des clésParcourir les nomsRécapitulatif - Bureau des stocks5Projet - Carnet de notes
Ajouter des élèvesEnregistrer les notes3Ensembles et comptage
Valeurs uniquesOpérations sur les ensemblesTests d’appartenanceCompter avec table()Récapitulatif - Invités à l’événement6Les fonctions comme valeurs
Fonctions anonymesPasser des fonctionsRetourner des fonctionsFermetures avec étatRécapitulatif - Règles de remise9Data Frames
Créer des Data FramesColonnes et lignesFiltrer les lignesAjouter et trierRécapitulatif - Rapport des ventes12Projet - Suivi des dépenses
Enregistrer les dépensesDépenses totalesEntraînez-vous par vous-même : Compilateur R en ligne