2010-01-20 20 views
189

Wenn ich einen Vektor von Typ Zeichen habe, wie kann ich die Werte in Zeichenfolge verketten? Hier ist, wie ich es mit Paste tun würde():Verketten Sie einen Vektor von Zeichenfolgen/Zeichen

sdata = c('a', 'b', 'c') 
paste(sdata[1], sdata[2], sdata[3], sep ='') 

Nachgeben "abc".

Aber natürlich funktioniert das nur, wenn ich die Länge von sdata vor der Zeit kenne.

Antwort

327

Versuch ein leeres Zusammenbruch Argument innerhalb der Paste-Funktion:

paste(sdata, collapse = '')

Dank http://twitter.com/onelinetips/status/7491806343

+2

Nur eine Anmerkung, dass, wenn 'sdata' entweder Strings enthalten kann, die alle die gleiche Länge oder variable Längen haben, dann' paste (sdata, sep = '', colla pse = '') 'sollte verwendet werden, um unerwartete Ergebnisse zu vermeiden. – zelanix

31

Matts Antwort ist auf jeden Fall die richtige Antwort. Hier ist jedoch eine alternative Lösung für Comic Relief Zwecke:

do.call(paste, c(as.list(sdata), sep = "")) 
+6

Sie könnten wirklich eine apply() Anweisung dort drin gearbeitet haben. Wenn Sie das tun, stimme ich Ihnen zu;) –

+0

Dies wäre tatsächlich die eleganteste Lösung, wenn der Parameter 'collapse' nicht existiert. also nicht viel komödiantische Erleichterung, wenn Sie kürzlich tatsächlich etwas sehr ähnliches machen mussten :) –

4

Für sdata:

gsub(", ","",toString(sdata)) 

Für einen Vektor von ganzen Zahlen:

gsub(", ","",toString(c(1:10))) 
+4

Dies ist eine gefährliche Antwort - wenn es Komma-Leerzeichen-Sequenzen in den Elementen des Vektors gibt, wird diese Antwort sie entfernen. – C8H10N4O2

2

Matt Turner Antwort ist auf jeden Fall die richtige Antwort. im Geiste der Antwort Ken Williams Allerdings könnten Sie auch tun:

stri_paste(letters, collapse='') 
## [1] "abcdefghijklmnopqrstuvwxyz" 

und einige Benchmarks:

capture.output(cat(sdata, sep="")) 
2

Sie stri_paste Funktion mit collapse Parameter aus stringi Paket wie diese verwenden können

require(microbenchmark) 
test <- stri_rand_lipsum(100) 
microbenchmark(stri_paste(test, collapse=''), paste(test,collapse=''), do.call(paste, c(as.list(test), sep=""))) 
Unit: microseconds 
             expr  min  lq  mean median  uq  max neval 
      stri_paste(test, collapse = "") 137.477 139.6040 155.8157 148.5810 163.5375 226.171 100 
       paste(test, collapse = "") 404.139 406.4100 446.0270 432.3250 442.9825 723.793 100 
do.call(paste, c(as.list(test), sep = "")) 216.937 226.0265 251.6779 237.3945 264.8935 405.989 100 
Verwandte Themen