web-dev-qa-db-fra.com

Comment utiliser la fonction strsplit avec un point

Je voudrais diviser la chaîne suivante par ses périodes. J'ai essayé strsplit() avec "." dans l'argument split, mais n'a pas obtenu le résultat souhaité.

s <- "I.want.to.split"
strsplit(s, ".")
[[1]]
 [1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

La sortie que je veux est de diviser s en 4 éléments dans une liste, comme suit.

[[1]]
[1] "I"     "want"  "to"    "split"

Que devrais-je faire?

24
user3022875

Lorsque vous utilisez une expression régulière dans l'argument split de strsplit(), vous devez échapper au . Avec \\., Ou utiliser une charclasse [.]. Sinon, vous utilisez . Comme sa signification de caractère spécial, "tout caractère unique".

s <- "I.want.to.split"
strsplit(s, "[.]")
# [[1]]
# [1] "I"     "want"  "to"    "split"

Mais la méthode la plus efficace consiste à utiliser l'argument fixed dans strsplit(). L'utilisation de cet argument contournera le moteur d'expression régulière et recherchera une correspondance exacte de ".".

strsplit(s, ".", fixed = TRUE)
# [[1]]
# [1] "I"     "want"  "to"    "split"

Et bien sûr, vous pouvez voir help(strsplit) pour en savoir plus.

32
Rich Scriven

Vous devez soit placer le point . à l'intérieur d'un classe de caractères ou précédez-le de deux barres obliques inverses pour lui échapper puisque le point est un caractère de signification spéciale en regex signifiant "correspondre à n'importe quel caractère unique (sauf la nouvelle ligne ) "

s <- 'I.want.to.split'
strsplit(s, '\\.')
# [[1]]
# [1] "I"     "want"  "to"    "split"
3
hwnd

Outre strsplit(), vous pouvez également utiliser scan(). Essayer:

scan(what = "", text = s, sep = ".")
# Read 4 items
# [1] "I"     "want"  "to"    "split"
1
nghauran