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

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.


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"

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.


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


3

Quelque chose de similaire avec toString

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

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'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.