Por que strsplit (“A, B. C”, c (“,”, “.”)) Não remove “. ”?

Oct 07 2020

Estou claramente interpretando mal a documentação, então farei isso rápido. É meu entendimento que strsplit("A, B . C",c(", ",". "))deve pesquisar "A, B. C" para todas as ocorrências de "," e strsplit como se eu tivesse executado strsplit("A, B . C",", ")e então deve pegar a saída disso, ainda em forma de string, e strsplit como se Eu tinha corrido strsplit([tidied output],". "). Em outras palavras, minha saída esperada seria list(c("A","B ","C")).

Quando eu realmente executo este código, obtenho o seguinte resultado, mostrando que o "." Não foi removido. O que deu errado?

> strsplit("A, B . C",c(", ",". "))
[[1]]
[1] "A"     "B . C"

Parece não ser um problema de regex. Por exemplo, a configuração fixed=TRUEdeve desabilitar a correspondência de regex, mas não altera minha saída:

> strsplit("A, B . C",c(", ",". "),fixed = TRUE)
[[1]]
[1] "A"     "B . C"

Respostas

4 AkselA Oct 07 2020 at 02:59

Quando um vetor splitnão funciona exatamente assim, consulte f.ex

strsplit(c("A, B . C", "A, B . C"), c(", ", ". "), fixed=TRUE )
# [[1]]
# [1] "A"     "B . C"

# [[2]]
# [1] "A, B " "C"    

É um ciclo contínuo x. Se xtiver comprimento um, apenas o primeiro splitserá usado.
A maneira mais fácil de adicionar mais argumentos splité, descobri, tratá-lo apenas como regex regular, por exemplo

strsplit("A, B . C",  "[.,] " )
# [[1]]
# [1] "A"  "B " "C"