Как использовать функцию strsplit с периодом

Я хотел бы разбить следующую строку на ее периоды. Я пробовал strsplit() с "." в аргументе split, но не получил результат, который я хочу.

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

Выход, который я хочу, состоит в разделении s на 4 элемента в списке, как показано ниже.

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

Что мне делать?

Ответы

Ответ 1

При использовании регулярного выражения в аргументе split strsplit() вам нужно избежать . с помощью \\. или использовать charclass [.]. В противном случае вы используете . в качестве своего специального символа, означающего "любой отдельный символ".

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

Но более эффективным методом является использование аргумента fixed в strsplit(). Использование этого аргумента будет обходить механизм регулярных выражений и искать точное соответствие ".".

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

И, конечно, вы можете увидеть help(strsplit) для большего.

Ответ 2

Вам нужно либо поместить точку . внутри класса символов , либо предварять ее двумя обратными косыми чертами, чтобы избежать ее, поскольку точка символ специальный смысл в regex означает "соответствовать любому одиночному символу (кроме новой строки)"

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

Ответ 3

Период является особым символом, нужно бежать, как упоминалось

> strsplit(s, "\\.")
[[1]]
[1] "I"     "want"  "to"    "split"