ทำไม strsplit (“ A, B. C”, c (“,”,“.”)) ไม่ลบ“. ”?

Oct 07 2020

ฉันเข้าใจผิดอย่างชัดเจนในเอกสารดังนั้นฉันจะสรุปให้เร็ว ๆ นี้ เป็นความเข้าใจของฉันที่strsplit("A, B . C",c(", ",". "))ควรค้นหา "A, B. C" สำหรับเหตุการณ์ที่เกิดขึ้นทั้งหมดของ "," และแยกมันออกราวกับว่าฉันวิ่งstrsplit("A, B . C",", ")แล้วมันควรจะเอาผลลัพธ์ของสิ่งนั้นยังคงอยู่ในรูปแบบสตริงและ strs แยกมันราวกับ strsplit([tidied output],". ")ฉันมีวิ่ง ในคำอื่น ๆ list(c("A","B ","C"))คาดว่าการส่งออกของฉันจะเป็น

เมื่อฉันเรียกใช้รหัสนี้จริงฉันได้ผลลัพธ์ต่อไปนี้แสดงว่า "." ยังไม่ถูกลบออก เกิดอะไรขึ้น?

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

ดูเหมือนว่าจะไม่ใช่ปัญหา regex ตัวอย่างเช่นการตั้งค่าfixed=TRUEควรปิดใช้งานการจับคู่ regex แต่จะไม่เปลี่ยนผลลัพธ์ของฉัน:

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

คำตอบ

4 AkselA Oct 07 2020 at 02:59

เมื่อกำหนดเวกเตอร์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คือฉันพบเพียงแค่ถือว่าเป็น regex ปกติเช่น

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