2010-01-20 3 views
189

문자 유형의 벡터가있는 경우 문자열에 값을 연결하려면 어떻게해야합니까? 여기에 내가) 붙여 넣기 (와 그것을 할 것입니다 방법은 다음과 같습니다문자열/문자 벡터 연결

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

"abc"를 산출.

물론, 내가 sdata의 길이를 알고있는 경우에만 작동합니다. 붙여 넣기 함수 내에서 빈 붕괴 인수를 사용

답변

327
+2

'sdata'가 모두 같은 길이 또는 가변 길이의 문자열을 포함 할 수 있다면'paste (sdata, sep = '', colla pse = '')'는 예기치 않은 결과를 피하기 위해 사용해야합니다. – zelanix

31

매트의 대답

paste(sdata, collapse = '')

덕분에 확실히 정답이다.

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

실제로 거기에서 apply() 문을 사용할 수있었습니다. 만약 내가 당신을 투표 할거야;) –

+0

'collapse' 매개 변수가 존재하지 않는다면 이것은 실제로 가장 우아한 해결책이 될 것입니다. 그래서 당신이 최근에 실제로 매우 비슷한 것을해야한다면 코미디 릴리프가별로 없습니다 :) –

4

sdata의 경우 :

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

정수의 벡터를 들면 : 그러나, 여기에 코믹 릴리프 목적을위한 대체 솔루션입니다

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

이것은 위험한 답변입니다 - 벡터 요소에 콤마 공간 시퀀스가 ​​있으면이 대답으로 제거됩니다. – C8H10N4O2

2

매트 터너의 대답은 확실히 정답이다. 그러나 켄 윌리엄스 '대답의 정신, 당신은 할 수 :

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

그리고 몇 가지 벤치 마크 : 당신은 stringi이 같은 패키지에서 collapse 매개 변수 stri_paste 기능을 사용할 수 있습니다

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

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