2011-06-14 49 views
54

我有一個數字向量,其中一個,我試圖變成一個字符向量,其中每個元素由逗號分隔。創建一個逗號分隔的向量

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

我失去了從粘貼功能有些參數? 幫助!?

回答

61

shQuote可能是這樣做的最好方法。具體而言,這可以讓你的輸出你想要的:

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

如果單引號都很好,你可以使用:

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

type="cmd"實際上提供轉義引號,這是對於大多數環境真正有用的,但如果你真的想在某處用未轉義的引號顯示它,cat提供。

7

假設你希望你在一個字符串(而不是字的矢量)輸出,你可以嘗試:

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

這讓你身邊的數字,而不是雙引號單引號,但它基本上是什麼你似乎想要。

而你總是可以逃脫獲得雙引號:

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

應打印出你想要用雙引號的。

26

你說要與輸出的字符向量,但其他人誰發現這個問題可能會尋找這些功能之一,而不是:

首先,一種方式來獲得輸出準備輸入至R;這將是dput

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

二,方式輸出csv文件,這將是write.csvwrite.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" 
+0

謝謝!這是最優雅的解決方案 – ikashnitsky 2017-12-07 00:47:06

3

除了shQuote,看到的功能sQuotedQuote分別包裝在單引號和雙引號的文本。您還需要設置options(useFancyQuotes=FALSE)以獲取純文本(單向)ASCII引號。

0

只是爲了添加到諾亞回答,如果你想使用的功能paste

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

應該給你:

[1] '1','2','3','4','5'