2010-01-20 129 views
189

如果我有一個字符類型的向量,我該如何將值連接成字符串?下面是我如何與貼(做)連接字符串/字符向量

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

產生​​。

但當然,只有當我知道SDATA時間提前的長篇作品。

回答

327

嘗試使用粘貼功能內的空崩潰說法:

paste(sdata, collapse = '')

由於http://twitter.com/onelinetips/status/7491806343

+2

只需注意,如果'sdata'可以包含全部長度相同或長度可變的字符串,則可以粘貼(sdata,sep ='',colla應該使用pse ='')'來避免意外的結果。 – zelanix 2014-01-19 22:03:46

31

馬特的答案肯定是正確的答案。然而,這裏是爲漫畫救濟性質的替代解決方案:

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

你真的可以在那裏工作一個apply()語句。如果你願意,我會投票給你;) – 2010-01-20 21:17:26

+0

如果'collapse'參數不存在,這實際上是最優雅的解決方案。所以沒有太多的喜劇救濟,如果你最近實際上不得不做一些非常類似的事情:) – 2015-03-06 09:03:22

4

對於sdata

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

對於整數向量:

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

這是一個危險的答案 - 如果向量的元素中有逗號空間序列,這個答案將刪除它們。 – C8H10N4O2 2016-03-18 21:08:41

2

馬特·特納的答案肯定是正確的答案。然而,在肯·威廉斯的答案的精神,你也可以這樣做:

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

可以使用stri_paste功能與collapse參數從stringi包這樣的:

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

而且一些基準:

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