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!?

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.


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"

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.


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).


3

Sesuatu yang mirip dengan toString

toString(paste0("'",1:10,"'") )

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'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.