การสร้างเวกเตอร์ที่คั่นด้วยลูกน้ำ


89

ฉันมีเวกเตอร์ที่เป็นตัวเลขตัวหนึ่งซึ่งฉันกำลังพยายามเปลี่ยนเป็นเวกเตอร์อักขระโดยที่แต่ละองค์ประกอบคั่นด้วยเครื่องหมายจุลภาค

> one = c(1:5)
> paste(as.character(one), collapse=", ")
[1] "1, 2, 3, 4, 5"
> paste(as.character(one), sep="' '", collapse=", ")
[1] "1, 2, 3, 4, 5"

อย่างไรก็ตามฉันต้องการให้ผลลัพธ์มีลักษณะดังนี้:

"1", "2", "3", "4", "5" 

ฉันไม่มีพารามิเตอร์บางตัวจากฟังก์ชันวางหรือไม่ ช่วยด้วย!?

คำตอบ:


91

shQuoteน่าจะเป็นวิธีที่ดีที่สุดในการดำเนินการนี้ โดยเฉพาะสิ่งนี้ทำให้คุณได้ผลลัพธ์ที่คุณต้องการ:

cat(paste(shQuote(one, type="cmd"), collapse=", "))

หากคำพูดเดี่ยวใช้ได้คุณสามารถใช้:

paste(shQuote(one), collapse=", ")

type="cmd"มีเครื่องหมายคำพูดที่ไม่ใช้ Escape ซึ่งเป็นสิ่งที่มีประโยชน์จริงสำหรับบริบทส่วนใหญ่ แต่ถ้าคุณต้องการแสดงคำพูดที่ไม่ใช้ Escape catให้ระบุไว้


2
paste(shQuote(one), collapse=", ")ให้[1] "\"1\", \"2\", \"3\", \"4\", \"5\""ไม่ใช่คำพูดเดียวที่แนบตัวแปร
vasili111

44

คุณบอกว่าคุณต้องการเวกเตอร์อักขระที่มีเอาต์พุตนั้น แต่คนอื่นที่พบคำถามนี้อาจมองหาฟังก์ชันเหล่านี้แทน

ขั้นแรกวิธีรับเอาต์พุตพร้อมสำหรับอินพุตไปยัง R; นั่นจะเป็นdput:

> dput(as.character(one))
c("1", "2", "3", "4", "5")

ประการที่สองวิธีในการส่งออกไฟล์ csv ซึ่งจะเป็นwrite.csvหรือwrite.table. ฟังก์ชันเหล่านี้ใช้พารามิเตอร์fileไม่ได้ใช้ที่นี่เพื่อส่งออกไปยังไฟล์โดยตรง

> write.table(matrix(as.character(one),nrow=1), sep=",",
              row.names=FALSE, col.names=FALSE)
"1","2","3","4","5"

> write.csv(matrix(as.character(one),nrow=1),row.names=FALSE)
"V1","V2","V3","V4","V5"
"1","2","3","4","5"

14

สมมติว่าคุณต้องการให้เอาต์พุตเป็นสตริงอักขระ (ตรงข้ามกับเวกเตอร์ของอักขระ) คุณสามารถลอง:

paste("'",as.character(one),"'",collapse=", ",sep="")

นั่นทำให้คุณมีเครื่องหมายคำพูดเดี่ยวรอบ ๆ ตัวเลขแทนที่จะเป็นเครื่องหมายคำพูดคู่ แต่โดยพื้นฐานแล้วมันเป็นสิ่งที่คุณต้องการ

และคุณสามารถหลบหนีเพื่อรับเครื่องหมายคำพูดคู่ได้เสมอ:

rs <- paste("\"",as.character(one),"\"",collapse=", ",sep="")
cat(rs)

ที่ควรพิมพ์สิ่งที่คุณต้องการด้วยเครื่องหมายคำพูดคู่


4

นอกจากนี้shQuoteโปรดดูฟังก์ชันsQuoteและdQuoteการตัดข้อความในเครื่องหมายคำพูดเดี่ยวและคู่ตามลำดับ คุณจะต้องตั้งค่าoptions(useFancyQuotes=FALSE)ให้รับอัญประกาศ ASCII ธรรมดา (ทิศทางเดียว)



2

เพียงเพื่อเพิ่มคำตอบของโนอาห์หากคุณต้องการใช้pasteฟังก์ชัน:

paste(shQuote(one, type="sh"), collapse=", ")

ควรให้คุณ:

[1] '1','2','3','4','5'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.