size = 150000
для векторов значений и шансов
library('data.table')
df1 <- data.table(totalNum = rep(0,10000),
totalAmt = rep(0,10000))
values <- sample(200:5000,150000, replace = TRUE)
chances <- runif(n=150000, min=1e-12, max=.9999999999)
invisible( mapply( function(value, chance){
df1[runif(10000) < chance, `:=` (totalNum = totalNum + 1, totalAmt = totalAmt + value)]
return(0)
}, value = values, chance = chances) )
В моей системе этот код завершается в следующий раз с использованием функции system.time()
.
# user system elapsed
# 252.83 43.93 298.68