2010-01-20 40 views
189

Nếu tôi có một vectơ ký tự kiểu, làm cách nào tôi có thể nối các giá trị vào chuỗi? Đây là cách tôi sẽ làm điều đó với dán():Ghép nối một vectơ của chuỗi/ký tự

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

năng suất "abc".

Nhưng tất nhiên, điều đó chỉ hoạt động nếu tôi biết độ dài sdata trước thời hạn.

Trả lời

327

Hãy thử sử dụng một sản phẩm nào lập luận sụp đổ bên trong hàm dán:

paste(sdata, collapse = '')

Nhờ http://twitter.com/onelinetips/status/7491806343

+2

Chỉ cần lưu ý rằng nếu 'sdata' có thể chứa một trong hai chuỗi có cùng độ dài hoặc độ dài biến thì' dán (sdata, sep = '', colla pse = '') 'nên được sử dụng để tránh các kết quả không mong muốn. – zelanix

31

câu trả lời của Matt chắc chắn là câu trả lời đúng. Tuy nhiên, đây là một giải pháp thay thế cho các mục đích cứu trợ truyện tranh:

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

bạn thực sự có thể đã làm việc một tuyên bố áp dụng() trong đó. Nếu bạn làm tôi sẽ bình chọn bạn;) –

+0

đây thực sự sẽ là giải pháp thanh lịch nhất nếu thông số 'collapse' không tồn tại. Vì vậy, không có nhiều sự hài lòng nếu bạn gần đây thực sự phải làm điều gì đó rất giống nhau :) –

4

Đối sdata:

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

Đối với một vector của các số nguyên: Câu trả lời

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

Đây là một câu trả lời nguy hiểm - nếu có chuỗi dấu phẩy-không gian trong các phần tử của vectơ, câu trả lời này sẽ loại bỏ chúng. – C8H10N4O2

2

Matt Turner chắc chắn là câu trả lời đúng. Tuy nhiên, theo tinh thần của Ken Williams' câu trả lời, bạn cũng có thể làm:

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

Bạn có thể sử dụng stri_paste chức năng với collapse tham số từ stringi gói như thế này:

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

Và một số tiêu chuẩn:

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 
Các vấn đề liên quan