Strsplit (“A, B. C”, c (“,”, “.”)) Neden “. "?

Oct 07 2020

Belgeleri açıkça yanlış anlıyorum, bu yüzden bunu hızlı yapacağım. Benim anlayışıma göre strsplit("A, B . C",c(", ",". ")), "A, B. C" yi "" nin tüm oluşumlarını aramak ve onu koşmuşum gibi ayırmak strsplit("A, B . C",", ")ve sonra bunun çıktısını hala bir dize biçiminde almak ve sanki Koştum strsplit([tidied output],". "). Başka bir deyişle, beklenen çıktım olacaktır list(c("A","B ","C")).

Bu kodu gerçekten çalıştırdığımda, "." İşaretinin kaldırılmadığını gösteren aşağıdaki sonucu alıyorum. Ne yanlış gitti?

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

Normal ifade sorunu olmadığı görülüyor. Örneğin, ayarın fixed=TRUEnormal ifade eşleşmesini devre dışı bırakması gerekiyor, ancak çıktımı değiştirmiyor:

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

Yanıtlar

4 AkselA Oct 07 2020 at 02:59

Bir vektör verildiğinde tam olarak splitbu şekilde çalışmaz, bkz. F.ex

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

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

Döndürüldü x. Eğer xuzunluk biri, sadece ilk splitkullanılacaktır.
Daha fazla argüman eklemenin en kolay yolu split, bunu normal bir normal ifade olarak ele almaktır, ör.

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