Какой самый эффективный способ вставить строки в R? - PullRequest
7 голосов
/ 02 мая 2019

У меня есть два очень больших вектора, которые мне нужно объединить с разделителем для формирования уникальных идентификаторов. Например:

set.seed(1)

vec1 <- sample(1:10, 10000000, replace = T)
vec2 <- sample(1:1000000000, 10000000))

Я сейчас использую paste0 ():

system.time({    

uniq_id <- paste0(vec1, "_", vec2)

})

Однако из-за размеров vec1 и vec2 это происходит довольно медленно. Есть ли альтернативный метод с большей производительностью?

1 Ответ

2 голосов
/ 02 мая 2019

Более эффективный способ - stringi::stri_c

library(microbenchmark)
b <- microbenchmark(
  paste = paste0(vec1, "_", vec2),
  stringi = stringi::stri_c(vec1, vec2, sep = "_"),
  times = 10
)

Результат

b
#Unit: seconds
#    expr      min       lq     mean   median       uq      max neval cld
#   paste 5.475398 5.509957 5.544477 5.542728 5.566904 5.632173    10   b
# stringi 3.862541 3.871826 3.896242 3.897264 3.914894 3.934175    10  a 
...