Erstellen eines durch Kommas getrennten Vektors


88

Ich habe einen numerischen Vektor, einen, den ich in einen Zeichenvektor verwandeln möchte, bei dem jedes Element durch Kommas getrennt ist.

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

Ich möchte jedoch, dass die Ausgabe wie folgt aussieht:

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

Vermisse ich einen Parameter in der Einfügefunktion? Hilfe!?

Antworten:


91

shQuoteist wahrscheinlich der beste Weg, dies zu tun. Insbesondere erhalten Sie so die gewünschte Ausgabe:

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

Wenn einfache Anführungszeichen in Ordnung sind, können Sie Folgendes verwenden:

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

type="cmd"bietet tatsächlich maskierte Anführungszeichen, was für die meisten Kontexte tatsächlich nützlich ist, aber wenn Sie es wirklich irgendwo mit nicht entflohenen Anführungszeichen anzeigen möchten, catbietet dies.


2
paste(shQuote(one), collapse=", ")gibt [1] "\"1\", \"2\", \"3\", \"4\", \"5\""keine einfache einfache beiliegende Variante an.
Vasili111

44

Sie sagen, Sie möchten einen Zeichenvektor mit dieser Ausgabe, aber andere, die diese Frage finden, suchen möglicherweise stattdessen nach einer dieser Funktionen:

Erstens eine Möglichkeit, die Ausgabe für die Eingabe in R vorzubereiten; das wäre dput:

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

Zweitens eine Möglichkeit, eine CSV-Datei auszugeben, die write.csvoder wäre write.table. Diese Funktionen verwenden einen Parameter file, der hier nicht verwendet wird, um direkt in eine Datei auszugeben.

> 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
Vielen Dank! Dies ist die eleganteste Lösung
ikashnitsky

14

Angenommen, Sie möchten Ihre Ausgabe in einer Zeichenfolge (im Gegensatz zu einem Vektor von Zeichen), können Sie Folgendes versuchen:

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

Das gibt Ihnen einfache Anführungszeichen um die Zahlen anstatt doppelte Anführungszeichen, aber es ist im Grunde das, was Sie zu wollen scheinen.

Und Sie können jederzeit entkommen, um doppelte Anführungszeichen zu erhalten:

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

das sollte ausdrucken, was Sie mit den doppelten Anführungszeichen wollen.


4

Zusätzlich zu shQuotefinden , die Funktionen sQuoteund die dQuotejeweils Text in einfachen und doppelten Anführungszeichen wickeln. Sie möchten auch festlegen options(useFancyQuotes=FALSE), dass einfache (unidirektionale) ASCII-Anführungszeichen angezeigt werden.


3

Ähnliches gilt für toString

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

2

Nur um Noahs Antwort zu ergänzen, wenn Sie die pasteFunktion verwenden möchten :

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

Sollte Ihnen geben:

[1] '1','2','3','4','5'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.