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

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.


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"

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.


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


3

Algo similar con toString

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

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'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.