Création d'un vecteur séparé par des virgules

88

J'ai un vecteur numérique, un, que j'essaie de transformer en vecteur de caractères où chaque élément est séparé par des virgules.

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

Cependant, je veux que la sortie ressemble à:

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

Est-ce que je manque un paramètre de la fonction coller? Aidez-moi!?

ATMathew
la source

Réponses:

91

shQuoteest probablement la meilleure façon de procéder. Plus précisément, cela vous donne le résultat souhaité:

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

Si les guillemets simples vous conviennent, vous pouvez utiliser:

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

type="cmd"fournit en fait des guillemets échappés, ce qui est réellement utile pour la plupart des contextes, mais si vous voulez vraiment l'afficher quelque part avec des guillemets non échappés, catfournit cela.

Noé
la source
2
paste(shQuote(one), collapse=", ")donne [1] "\"1\", \"2\", \"3\", \"4\", \"5\"", pas une variante incluse entre guillemets.
vasili111
44

Vous dites que vous voulez un vecteur de caractères avec cette sortie, mais d'autres qui trouvent cette question peuvent rechercher l'une de ces fonctions à la place:

Premièrement, un moyen de préparer la sortie pour l'entrée dans R; ce serait dput:

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

Deuxièmement, un moyen de générer un fichier csv, qui serait write.csvou write.table. Ces fonctions prennent un paramètre file, non utilisé ici, pour sortir directement dans un fichier.

> 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 a quitté le débordement de pile
la source
1
Merci! C'est la solution la plus élégante
ikashnitsky
14

En supposant que vous vouliez votre sortie dans une chaîne de caractères (par opposition à un vecteur de caractères), vous pouvez essayer:

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

Cela vous donne des guillemets simples autour des nombres plutôt que des guillemets doubles, mais c'est essentiellement ce que vous semblez vouloir.

Et vous pouvez toujours vous échapper pour obtenir des guillemets doubles:

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

qui devrait imprimer ce que vous voulez avec les guillemets doubles.

joran
la source
4

En plus de shQuote, voir les fonctions sQuoteet dQuotepour envelopper le texte entre guillemets simples et doubles respectivement. Vous voudrez également définir options(useFancyQuotes=FALSE)pour obtenir des guillemets ASCII simples (unidirectionnels).

Hong Ooi
la source
3

Quelque chose de similaire avec toString

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

Juste pour ajouter à la réponse de Noah si vous souhaitez utiliser la pastefonction:

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

Devrait vous donner:

[1] '1','2','3','4','5'
Kevin Ogoro
la source