J'ai le vecteur suivant:
X <- c("mama.log", "papa.log", "mimo.png", "mentor.log")
Comment récupérer un autre vecteur qui ne contient que des éléments commençant par "m" et se terminant par ".log"?
vous pouvez utiliser grepl
avec une expression régulière:
X[grepl("^m.*\\.log", X)]
Essaye ça:
grep("^m.*[.]log$", X, value = TRUE)
## [1] "mama.log" "mentor.log"
Une variante de ceci consiste à utiliser un glob plutôt qu'une expression régulière:
grep(glob2rx("m*.log"), X, value = TRUE)
## [1] "mama.log" "mentor.log"
La documentation sur le package stringr
dit:
str_subset()
est un wrapper autour dex[str_detect(x, pattern)]
, et est équivalent àgrep(pattern, x, value = TRUE)
.str_which()
est un wrapper autour dewhich(str_detect(x, pattern))
, et est équivalent àgrep(pattern, x)
.
Ainsi, dans votre cas, la manière la plus élégante d'accomplir votre tâche en utilisant tidyverse
au lieu de la base R est la suivante.
library(tidyverse)
c("mama.log", "papa.log", "mimo.png", "mentor.log") %>%
str_subset(pattern = "^m.*\\.log")
ce qui produit la sortie:
[1] "mama.log" "mentor.log"
Utilisation de tuyaux ...
library(tidyverse)
c("mama.log", "papa.log", "mimo.png", "mentor.log") %>%
.[grepl("^m.*\\.log$", .)]
[1] "mama.log" "mentor.log"