Warum entfernt strsplit ("A, B. C", c (",", ".")) Nicht ". ”?

Oct 07 2020

Ich verstehe die Dokumentation eindeutig falsch, daher mache ich das schnell. Nach meinem Verständnis strsplit("A, B . C",c(", ",". "))sollte "A, B. C" nach allen Vorkommen von "," durchsucht und strsplitiert werden, als ob ich gelaufen wäre, strsplit("A, B . C",", ")und dann sollte die Ausgabe davon, immer noch in einer String-Form, genommen und strsplitiert werden, als ob ich hatte lief strsplit([tidied output],". "). Mit anderen Worten, meine erwartete Ausgabe wäre list(c("A","B ","C")).

Wenn ich diesen Code tatsächlich ausführe, erhalte ich das folgende Ergebnis, das zeigt, dass das "." Nicht entfernt wurde. Was ist schief gelaufen?

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

Es scheint kein Regex-Problem zu sein. Zum Beispiel soll die Einstellung den fixed=TRUERegex-Abgleich deaktivieren, ändert aber nichts an meiner Ausgabe:

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

Antworten

4 AkselA Oct 07 2020 at 02:59

Wenn ein Vektor splitnicht ganz so funktioniert, siehe f.ex.

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

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

Es ist mit dem Fahrrad gefahren x. Wenn die xLänge eins ist, wird nur die erste splitverwendet. Ich habe festgestellt, dass der
einfachste Weg, weitere Argumente hinzuzufügen, darin splitbesteht, es einfach als regulären regulären Ausdruck zu behandeln, z

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