Crear un vector separado por comas

88

Tengo un vector numérico, uno, que estoy tratando de convertir en un vector de caracteres donde cada elemento está separado por comas.

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

Sin embargo, quiero que la salida se vea así:

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

¿Me falta algún parámetro de la función de pegar? ¿¡Ayuda!?

ATMathew
fuente

Respuestas:

91

shQuotees probablemente la mejor manera de hacer esto. Específicamente, esto le brinda el resultado que desea:

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

Si las comillas simples están bien, puede usar:

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

type="cmd"en realidad proporciona comillas de escape, que es lo que es realmente útil para la mayoría de los contextos, pero si realmente desea mostrarlo en algún lugar con comillas sin escape, lo catproporciona.

Noé
fuente
2
paste(shQuote(one), collapse=", ")da [1] "\"1\", \"2\", \"3\", \"4\", \"5\"", no variante adjunta de comillas simples.
vasili111
44

Dice que quiere un vector de caracteres con esa salida, pero otros que encuentran esta pregunta pueden estar buscando una de estas funciones en su lugar:

Primero, una forma de preparar la salida para la entrada a R; eso sería dput:

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

En segundo lugar, una forma de generar un archivo csv, que sería write.csvo write.table. Estas funciones toman un parámetro file, que no se usa aquí, para enviar directamente a un archivo.

> 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 dejó Stack Overflow
fuente
1
¡Gracias! Esta es la solución más elegante
ikashnitsky
14

Suponiendo que desea su salida en una cadena de caracteres (a diferencia de un vector de caracteres), podría intentar:

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

Eso le da comillas simples alrededor de los números en lugar de comillas dobles, pero es básicamente lo que parece querer.

Y siempre puedes escapar para obtener comillas dobles:

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

que debería imprimir lo que quieras con las comillas dobles.

joran
fuente
4

Además shQuote, consulte las funciones sQuotey dQuotepara ajustar el texto entre comillas simples y dobles respectivamente. También querrá configurar options(useFancyQuotes=FALSE)para obtener comillas ASCII simples (unidireccionales).

Hong Ooi
fuente
3

Algo similar con toString

toString(paste0("'",1:10,"'") )
Ferroao
fuente
2

Solo para agregar a la respuesta de Noah si desea usar la pastefunción:

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

Debería darte:

[1] '1','2','3','4','5'
Kevin Ogoro
fuente