Можно ли векторизовать / ускорить выполнение цикла FOR, использующего предыдущие значения итерации?
В приведенном ниже репродуктивном примере:
- текущее производствовычисляется из текущего запаса
- текущее производство обновляет СЛЕДУЮЩИЙ запас
- , на следующей итерации использовался обновленный запас для определения текущего производства и т. д ...
Так что мне нужно вычислять запас на каждой итерации, чтобы вычислить производственную уставку ... Можно ли избежать (медленного) цикла for?
Текущая реализация занимает около 45 секунд для строк по 50 тыс.
# Dummy functions for the examples. Real code is more complicated
function1 <- function(energy, stock, critical) {
if (stock < critical) {
return (energy)
} else {
return(0)
}
}
function2 <- function(power) {
return(round(power/100))
}
# Dummy data
d <- data.frame( "energy"= c(660, 660, 660, 660),
"stock" = c(20, 0, 0, 0),
"delivery" = c(0, 0, 2, 0),
"critical" = c(50, 50 ,50, 50),
"power" = c(0, 0, 0, 0),
"production" = c(0, 0, 0, 0) )
for (i in 1:length(d$energy)) {
# Computing power, based on CUURENT stock
d$power[i] <- function1(d$energy[i], d$stock[i], d$critical[i])
# Computing production
d$production[i] <- function2(d$power[i])
# Updating NEXT stock with current production / delivery
if (i < length(d$energy)) {
d$stock[i+1] <- d$stock[i] + d$production[i] - d$delivery[i]
}
}
View(d)