J'essaie d'obtenir le nombre de crochets ouverts dans une chaîne de caractères dans R. J'utilise le str_count
fonction du package stringr
s<- "(hi),(bye),(hi)"
str_count(s,"(")
Erreur dans stri_count_regex (chaîne, modèle, opts_regex = attr (modèle,: `Parenthèses incorrectement imbriquées dans le modèle d'expression régulière. (U_REGEX_MISMATCHED_PAREN)
J'espère en avoir 3 pour cet exemple
(
est un caractère spécial. Vous devez y échapper:
str_count(s,"\\(")
# [1] 3
Alternativement, étant donné que vous utilisez stringr
, vous pouvez utiliser la fonction coll
:
str_count(s,coll("("))
# [1] 3
Vous pouvez également utiliser gregexpr
avec length
dans la base R:
sum(gregexpr("(", s, fixed=TRUE)[[1]] > 0)
[1] 3
gregexpr
prend un vecteur de caractères et retourne une liste avec les positions de départ de chaque correspondance. J'ai ajouté fixed = TRUE afin de faire correspondre les littéraux .length
ne fonctionnera pas car gregexpr
renvoie -1 lorsqu'une sous-expression n'est pas trouvée.
Si vous avez un vecteur de caractères de longueur supérieure à un, vous devez fournir le résultat à sapply
:
# new example
s<- c("(hi),(bye),(hi)", "this (that) other", "what")
sapply((gregexpr("(", s, fixed=TRUE)), function(i) sum(i > 0))
[1] 3 1 0
Si vous voulez le faire en base R, vous pouvez vous diviser en un vecteur de caractères individuels et compter le "("
directement (sans le représenter comme une expression régulière):
> s<- "(hi),(bye),(hi)"
> chars <- unlist(strsplit(s,""))
> length(chars[chars == "("])
[1] 3