Criação de um vetor separado por vírgula


88

Eu tenho um vetor numérico, um, que estou tentando transformar em um vetor de caracteres em que cada elemento é separado por vírgulas.

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

No entanto, quero que a saída seja semelhante a:

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

Estou faltando algum parâmetro da função colar? Socorro!?

Respostas:


91

shQuoteé provavelmente a melhor maneira de fazer isso. Especificamente, você obtém a saída que deseja:

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

Se as aspas simples forem adequadas, você pode usar:

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

type="cmd"na verdade, fornece aspas sem escape, o que é realmente útil para a maioria dos contextos, mas se você realmente quiser exibi-lo em algum lugar com aspas sem escape, catforneça isso.


2
paste(shQuote(one), collapse=", ")dá [1] "\"1\", \"2\", \"3\", \"4\", \"5\"", não a variante entre aspas simples.
— vasili111 de

44

Você diz que deseja um vetor de caracteres com essa saída, mas outras pessoas que encontrarem esta pergunta podem estar procurando por uma destas funções:

Primeiro, uma maneira de deixar a saída pronta para entrada em R; isso seria dput:

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

Em segundo lugar, uma maneira de gerar um arquivo csv, que seria write.csvou write.table. Essas funções usam um parâmetro file, não usado aqui, para produzir diretamente em um arquivo.

> 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
Obrigado! Esta é a solução mais elegante
— ikashnitsky

14

Supondo que você queira sua saída em uma string de caracteres (em oposição a um vetor de caracteres), você pode tentar:

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

Isso fornece aspas simples em torno dos números em vez de aspas duplas, mas é basicamente o que você parece querer.

E você sempre pode escapar para obter aspas duplas:

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

que deve imprimir o que você deseja com as aspas duplas.


4

Além disso shQuote, consulte as funções sQuotee dQuotepara quebrar o texto entre aspas simples e duplas, respectivamente. Você também deseja definir options(useFancyQuotes=FALSE)para obter citações ASCII simples (unidirecionais).


3

Algo semelhante com toString

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

2

Apenas para acrescentar à resposta de Noah se você quiser usar a pastefunção:

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

Deve dar a você:

[1] '1','2','3','4','5'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.