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=", ")[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.