2010-01-20 17 views
189

Se si dispone di un vettore di tipo carattere, come posso concatenare i valori in stringa? Ecco come lo farei con pasta():Concatenare un vettore di stringhe/caratteri

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

cedendo "abc".

Ma ovviamente, ciò funziona solo se conosco la lunghezza di sdata in anticipo.

risposta

327

Prova ad utilizzare un vuoto argomento crollo all'interno della funzione pasta:

paste(sdata, collapse = '')

Grazie a http://twitter.com/onelinetips/status/7491806343

+2

Solo una nota che se 'sdata' può contenere stringhe che sono tutte della stessa lunghezza o di lunghezze variabili allora 'incolla (sdata, sep =' ', colla pse = '') 'dovrebbe essere usato per evitare risultati imprevisti. – zelanix

31

risposta di Matt è sicuramente la risposta giusta. Tuttavia, ecco una soluzione alternativa per scopi comico:

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

potresti davvero aver elaborato una dichiarazione apply(). Se lo fai ti darò il tuo voto;) –

+0

questa sarebbe in realtà la soluzione più elegante se il parametro 'collapse' non esistesse. quindi non molto rilievo comico se recentemente hai dovuto fare qualcosa di molto simile :) –

4

Per sdata:

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

Per un vettore di interi: risposta

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

Questa è una risposta pericolosa - se ci sono sequenze spazio-virgola negli elementi del vettore, questa risposta le rimuoverà. – C8H10N4O2

2

Matt Turner è sicuramente la risposta giusta. Tuttavia, nello spirito di risposta Ken Williams', si potrebbe anche fare:

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

È possibile utilizzare stri_paste funzione con collapse parametro dal stringi pacchetto come questo:

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

E alcuni parametri di riferimento:

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 
Problemi correlati