Я видел огромное падение производительности операций data.table l oop, возможно, из-за обновления новой версии
library(data.table)
library(microbenchmark)
dt <- data.table('id'=1:20000,
'list_col'=sample(c('', '', 'a', 'a:b', 'a:b:c'), 20000, TRUE))
feature <- 'list_col'
microbenchmark(
long_dt <- dt[, c("id", feature), with = FALSE][
, feature_names := {
x <- get(feature)
stringr::str_split(x, ':')
}][
, .(
feature_names = paste0(feature, "_", unlist(feature_names))
)
, by = "id"]
, times = 10
, unit = 'ms'
)
data.table 1.12.8, настройки по умолчанию, с использованием 6 потоков:
min lq mean median uq max neval
122.2447 149.6991 173.3268 183.5777 193.9876 201.7234 10
data.table 1.13.0, настройки по умолчанию, с использованием 6 потоков:
min lq mean median uq max neval
12820.75 12913.1 12989.59 13007.94 13065.1 13097.85 10
Это может быть связано с новой функцией дросселирования (см .: https://github.com/Rdatatable/data.table/blob/master/NEWS.md )
Кроме того, я пробовал несколько различных комбинаций threads
и throttle
, но не заметил никаких улучшений