Как быстро применить различные последовательные фильтры к таблице данных - PullRequest
0 голосов
/ 07 августа 2020

Чтобы применить подход начальной загрузки, как описано в вопросе https://stats.stackexchange.com/questions/481803/is-estimating-confidence-intervals-ci-with-different-sample-sizes-in-each-boot, мне нужно применить различные фильтры к таблице данных, а затем создать новую таблицу данных, которая состоит из результатов каждого шага фильтрации.

Это воспроизводимый пример подхода начальной загрузки.

library(data.table)
dt <- data.table(compound= c(rep("ala", 5), rep("beta", 3), rep("phe", 8)),
             obs = c(rep(FALSE, 7), rep(TRUE, 9)))

boot::boot.ci(boot::boot(data.frame(var = dt$compound),
                         function(data, indices, stat_tab = dt){

                           comp_samp <- data[indices,]

                           fin_tab <- 
                           lapply(as.list(comp_samp), function(x, stat_tab_l = stat_tab){
                             stat_tab_l[x == compound]
                             })

                           fin_tab <- rbindlist(fin_tab)
                           
                           round(nrow(fin_tab[obs == TRUE])/nrow(fin_tab )*100,1)
                         },
                         R = 1000),
              index=1,
              type='basic')$basic

Обычно он работает, но очень медленно, что является проблемой, потому что мои настоящие наборы данных состоят из сотен соединений и 10000 наблюдений. Есть ли способ сделать это быстрее?

...