Membuat vektor yang dipisahkan koma

89

Saya memiliki vektor numerik, yang saya coba ubah menjadi vektor karakter di mana setiap elemen dipisahkan dengan koma.

> 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"

Namun, saya ingin hasilnya terlihat seperti:

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

Apakah saya kehilangan beberapa parameter dari fungsi paste? Tolong!?

ATMathew
sumber

Jawaban:

91

shQuotemungkin cara terbaik untuk melakukan ini. Secara khusus, ini memberi Anda keluaran yang Anda inginkan:

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

Jika tanda kutip tunggal baik-baik saja, Anda dapat menggunakan:

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

type="cmd"sebenarnya menyediakan tanda kutip lolos, yang sebenarnya berguna untuk sebagian besar konteks, tetapi jika Anda benar-benar ingin menampilkannya di suatu tempat dengan tanda kutip yang tidak di-escape, berikan catitu.

Nuh
sumber
2
paste(shQuote(one), collapse=", ")memberikan [1] "\"1\", \"2\", \"3\", \"4\", \"5\"", bukan varian tertutup kutipan tunggal.
vasili111
44

Anda mengatakan Anda menginginkan vektor karakter dengan keluaran itu, tetapi orang lain yang menemukan pertanyaan ini mungkin mencari salah satu dari fungsi berikut:

Pertama, cara untuk menyiapkan keluaran untuk masukan ke R; itu akan menjadi dput:

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

Kedua, cara untuk mengeluarkan file csv, yang akan menjadi write.csvatau write.table. Fungsi-fungsi ini mengambil parameter file, tidak digunakan di sini, untuk secara langsung menampilkan 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"
Aaron meninggalkan Stack Overflow
sumber
14

Dengan asumsi Anda ingin output Anda dalam string karakter (sebagai lawan dari vektor karakter), Anda dapat mencoba:

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

Itu memberi Anda tanda kutip tunggal di sekitar angka daripada tanda kutip ganda, tetapi pada dasarnya itulah yang tampaknya Anda inginkan.

Dan Anda selalu dapat melarikan diri untuk mendapatkan tanda kutip ganda:

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

yang harus mencetak apa yang Anda inginkan dengan tanda kutip ganda.

joran
sumber
4

Selain itu shQuote, lihat fungsi sQuotedan dQuoteuntuk membungkus teks dalam tanda kutip tunggal dan ganda. Anda juga ingin menyetel options(useFancyQuotes=FALSE)agar mendapatkan tanda kutip ASCII biasa (searah).

Hong Ooi
sumber
3

Sesuatu yang mirip dengan toString

toString(paste0("'",1:10,"'") )
Ferroao
sumber
2

Sekadar menambahkan jawaban Nuh jika Anda ingin menggunakan pastefungsi:

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

Harus memberi Anda:

[1] '1','2','3','4','5'
Kevin Ogoro
sumber