Почему strsplit («A, B. C», c («,», «.»)) Не удаляет «. »?
Я явно неправильно понимаю документацию, поэтому сделаю это быстро. strsplit("A, B . C",c(", ",". "))Насколько я понимаю, он должен искать "A, B. C" для всех вхождений "," и strsplit его, как если бы я запускал, strsplit("A, B . C",", ")а затем он должен взять вывод этого, все еще в строковой форме, и strsplit его, как если бы Я сбежал strsplit([tidied output],". "). Другими словами, мой ожидаемый результат будет list(c("A","B ","C")).
Когда я действительно запускаю этот код, я получаю следующий результат, показывающий, что «.» Не был удален. Что пошло не так?
> strsplit("A, B . C",c(", ",". "))
[[1]]
[1] "A" "B . C"
Похоже, это не проблема с регулярным выражением. Например, настройка fixed=TRUEдолжна отключать сопоставление регулярных выражений, но это не меняет мой вывод:
> strsplit("A, B . C",c(", ",". "),fixed = TRUE)
[[1]]
[1] "A" "B . C"
Ответы
Когда заданный вектор splitработает не совсем так, см. F.ex
strsplit(c("A, B . C", "A, B . C"), c(", ", ". "), fixed=TRUE )
# [[1]]
# [1] "A" "B . C"
# [[2]]
# [1] "A, B " "C"
Он крутится на велосипеде x. Если xимеет длину один, splitбудет использоваться только первый из них. Я обнаружил, что
самый простой способ добавить больше аргументов split- просто рассматривать его как обычное регулярное выражение, например
strsplit("A, B . C", "[.,] " )
# [[1]]
# [1] "A" "B " "C"