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

ATMathew
fonte

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.

Noé
fonte
2
paste(shQuote(one), collapse=", ")[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"
Aaron saiu do Stack Overflow
fonte
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.

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

Hong Ooi
fonte
3

Algo semelhante com toString

toString(paste0("'",1:10,"'") )
Ferroao
fonte
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'
Kevin Ogoro
fonte