创建一个逗号分隔的向量


88

我有一个数字向量,我正在尝试将其转换为字符向量,其中每个元素都用逗号分隔。

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

我是否在粘贴功能中缺少某些参数?救命!?

Answers:


91

shQuote可能是做到这一点的最好方法。具体来说,这将为您提供所需的输出:

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

如果单引号没问题,则可以使用:

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

type="cmd"实际上提供转义的引号,这在大多数情况下实际上是有用的,但是如果您真的想用未转义的引号显示它,则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.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"

1
谢谢!这是最优雅的解决方案
ikashnitsky

14

假设您希望输出一个字符串(而不是字符向量),则可以尝试:

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

这样您就可以在数字周围加上单引号而不是双引号,但这基本上就是您想要的。

而且您总是可以逃脱以获得双引号:

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

应该会打印出您想要的双引号。


4

除之外shQuote,请参见函数sQuotedQuote分别将文本用单引号和双引号引起来。您还需要设置options(useFancyQuotes=FALSE)为获取纯(单向)ASCII引号。



2

如果要使用该paste功能,只需添加到诺亚的答案:

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

应该给你:

[1] '1','2','3','4','5'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.