Virgülle Ayrılmış Vektör Oluşturma


89

Sayısal bir vektörüm var, biri, her bir öğenin virgülle ayrıldığı bir karakter vektörüne dönüştürmeye çalışıyorum.

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

Ancak çıktının şöyle görünmesini istiyorum:

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

Yapıştırma işlevinden bazı parametreler eksik mi? Yardım!?

Yanıtlar:


91

shQuotemuhtemelen bunu yapmanın en iyi yoludur. Özellikle, bu size istediğiniz çıktıyı sağlar:

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

Tek tırnak iyi ise şunları kullanabilirsiniz:

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

type="cmd"aslında çoğu bağlam için yararlı olan, kaçan alıntılar sağlar, ancak onu gerçekten bir yerde kaçılmamış alıntılarla görüntülemek istiyorsanız, bunu catsağlar.


2
paste(shQuote(one), collapse=", ")verir [1] "\"1\", \"2\", \"3\", \"4\", \"5\""değil tek tırnak içine varyantı.
vasili111

44

Bu çıktıyla bir karakter vektörü istediğinizi söylüyorsunuz, ancak bu soruyu bulan diğerleri bunun yerine şu işlevlerden birini arıyor olabilir:

İlk olarak, çıktıyı R'ye girdi için hazır hale getirmenin bir yolu; bu şöyle olur dput:

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

İkinci olarak, bir csv dosyası çıktılamanın bir yolu, bu write.csvveya write.table. Bu işlevler file, doğrudan bir dosyaya çıktı vermek için burada kullanılmayan bir parametre alır .

> 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

Çıktınızı bir karakter dizesinde istediğinizi varsayarak (bir karakter vektörünün aksine) deneyebilirsiniz:

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

Bu size çift tırnak yerine tek tırnak işareti verir, ancak temelde istediğiniz şey budur.

Ve çift tırnak almak için her zaman kaçabilirsiniz:

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

çift ​​tırnaklarla istediğinizi yazdırmalıdır.


4

Ek olarak shQuote, fonksiyonları görmek sQuoteve dQuotesırasıyla tek ve çift tırnak metin sarmak için. Ayrıca options(useFancyQuotes=FALSE)düz (tek yönlü) ASCII teklifleri almayı ayarlamak isteyeceksiniz .


3

ToString ile benzer bir şey

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

2

pasteFonksiyonu kullanmak istiyorsanız Noah'ın cevabına eklemek için :

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

Size vermeli:

[1] '1','2','3','4','5'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.