2011-06-14 3 views
54

J'ai un vecteur numérique, un, que je suis en train de se transformer en un vecteur de caractère où chaque élément est séparé par des virgules.Création d'une séparées par des virgules vecteur

> 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 la sortie ressemble:

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

Suis-je manque un paramètre de la fonction de la pâte? Aide !?

Répondre

61

shQuote est probablement la meilleure façon de le faire. Plus précisément, cela vous obtient la sortie que vous voulez:

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

Si des guillemets simples sont très bien, vous pouvez utiliser:

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

type="cmd" fournit effectivement échappées des citations, qui est ce qui est réellement utile pour la plupart des contextes, mais si vous voulez vraiment l'afficher quelque part avec des citations unescaped, cat prévoit que.

7

En supposant que vous voulez que 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 chiffres plutôt que des guillemets doubles, mais il est essentiellement ce que tu sembles vouloir.

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

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

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

26

Vous dites que vous voulez un vecteur de caractère avec cette sortie, mais d'autres qui trouvent cette question peut être à la recherche d'une de ces fonctions à la place:

D'abord, un moyen d'obtenir une sortie prête pour l'entrée à R; ce serait dput:

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

En second lieu, un moyen de sortie un fichier csv, qui serait write.csv ou write.table. Ces fonctions prennent un paramètre file, non utilisé ici, directement vers 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" 
+0

Merci! C'est la solution la plus élégante – ikashnitsky

3

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

0

Juste pour ajouter à la réponse de Noé si vous souhaitez utiliser la fonction paste:

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

devrait vous donner:

[1] '1','2','3','4','5' 
Questions connexes