Perché strsplit ("A, B. C", c (",", ".")) Non rimuove ". "?

Oct 07 2020

Sto chiaramente fraintendendo la documentazione, quindi lo farò velocemente. È mia comprensione che strsplit("A, B . C",c(", ",". "))dovrebbe cercare "A, B. C" per tutte le occorrenze di "," e strsplit come se avessi eseguito strsplit("A, B . C",", ")e quindi dovrebbe prendere l'output di quello, sempre in forma di stringa, e strsplit come se avevo corse strsplit([tidied output],". "). In altre parole, il mio output previsto sarebbe list(c("A","B ","C")).

Quando eseguo effettivamente questo codice, ottengo il seguente risultato, che mostra che "." Non è stato rimosso. Cosa è andato storto?

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

Sembra non essere un problema di regex. Ad esempio, l'impostazione fixed=TRUEdovrebbe disabilitare la corrispondenza delle espressioni regolari, ma non cambia il mio output:

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

Risposte

4 AkselA Oct 07 2020 at 02:59

Quando viene dato un vettore splitnon funziona proprio così, vedi f.ex

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

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

È pedalato x. Se xè di lunghezza uno, splitverrà utilizzato solo il primo di .
Il modo più semplice per aggiungere più argomenti splitè, ho scoperto, trattarlo come una normale regex, ad es

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