Предположим, у меня есть следующая структура данных:
sl_sev_disbn <- data.frame("lower_band" = c(0,10e6,20e6,30e6,0,0,0),
"upper_band" = c(10e6,20e6,30e6,40e6,0,0,0),
"prob" = c(0.56521739,0.34782609,0.08212560,0.00483092,0,0,0),
"band" = c(1,2,3,4,5,6,7))
Я хочу случайной выборкой "полосы" из этого кадра данных, используя заданные вероятности в качестве весов. Из этой полосы я хочу сэмплировать случайное число равномерно из заданных нижней и верхней полос, сохранить каждую выборку и вернуть ее в вектор. У меня есть следующий код:
rsuper_lrg_disbn <- function(n = 1,df){
band_sample <- sample(x = df$band, size = n, prob = df$prob,replace=TRUE)
vals <- c()
for (band in band_sample){
filt_df <- df[df$band == band,] #filter to randomly selected band
loss <- runif(1,min=filt_df$lower_band,max=filt_df$upper_band)
vals <- c(vals,loss)
}
return(vals)
}
Тогда его использование будет выглядеть так: rsuper_lrg_disbn(n=2,sl_sev_disbn)
Однако этот код сильно замедляется, если я использую очень большое значение n, такое как n = 1e6.
Кто-нибудь знает, как я могу ускорить это?