2017-02-27 1 views
1

J'essaye de sous-classer une liste, basée sur des caractères spéciaux attachés aux éléments. J'ai trouvé plusieurs résultats, mais je pense que je ne comprends pas comment traiter les caractères spéciaux et trouver des éléments contenant des caractères spéciaux. Je voudrais avoir un résultat avec tous les éléments contenant '**' à la fin. J'apprécie n'importe quelle aide et je m'excuse s'il y avait déjà une question semblable, que je n'ai pas trouvée. Une réponse générale sur le traitement des caractères spéciaux lors de la sous-sélection d'une liste sera également très appréciée. Merci pour votre temps.Sélectionner un élément de liste avec un caractère spécial

Exemple-Code:

x1 <- c('a**', 'b', 'c**') 
x2 <- c('d**', 'b', 'e**') 

y <- list(x1,x2) 

#Here are a couple of results i tried: 

grep('\\**', y, value =TRUE, ignore.case = TRUE) 

y[lapply(y, function(x) x[grep("[^\\**]", x),])] 

Filter(function(x) !any(grepl("[^\\**]", x)), y) 

y[y = "[^\\**]"] 
+3

'grep ("\\ * \\ *", unlist (y), valeur = TRUE)'. Vous devez vous échapper (\\\) pour chaque * –

+0

Merci! C'était très rapide! – Simon

+2

Ou 'grep (" \\ * {2} $ ", unlist (y), value = TRUE)' ce qui est plus facile si vous avez un plus grand nombre de répétitions et que le signe dollar est à la fin de la chaine –

Répondre

1

Nous pouvons utiliser grep avec fixed=TRUE

grep("**", unlist(y), value = TRUE, fixed = TRUE) 
#[1] "a**" "c**" "d**" "e**" 
+2

le temps que vous avez pris pour répondre à ma question, mais je suis incapable de comprendre la solution que vous avez fournie dans le contexte de ma question. Pourriez-vous s'il vous plaît élaborer plus loin? – Simon

+0

@Simon Veuillez vérifier la sortie 'grep'. Je suppose que c'est ce que tu voulais> – akrun

+0

Merci. La sortie grep fonctionne parfaitement, cependant, la sous-chaîne ne sert malheureusement pas à sélectionner les éléments. – Simon