Вот простой пример одного типа итерационного известково:В R, как мне сделать итеративный расчет без использования цикла?
vals <- data.frame("x"=c(14, 15, 12, 10, 17), "ema"=0)
vals$ema[1] <- vals$x[1]
K <- 0.90
for(jj in 2:nrow(vals))
vals$ema[jj] <- K * vals$ema[jj-1] + (1-K) * vals$x[jj]
vals
x ema
1 14 14.0000
2 15 14.1000
3 12 13.8900
4 10 13.5010
5 17 13.8509
Более привлеченными примеры использования, если ... то еще, чтобы определить следующее значение:
for(jj in 2:nrow(vals))
if(K * vals$ema[jj-1] + (1-K) * vals$x[jj] < 5.0)
vals$ema[jj] <- 5.0
else if(K * vals$ema[jj-1] + (1-K) * vals$x[jj] > 15.0)
vals$ema[jj] <- 15.0
else
vals$ema[jj] <- K * vals$ema[jj-1] + (1-K) * vals$x[jj]
Я не уверен, если это будет более участвовать или нет, но решение может быть основано на предыдущем значении, а также:
K1 <- 0.999
K2 <- 0.95
K3 <- 0.90
for(jj in 2:now(vals))
if(vals$ema[jj-1] < 0.0)
vals$ema[jj] <- K1 * vals$ema[jj-1] + (1-K1) * vals$x[jj]
else if(vals$ema[jj-1] > 100.0)
vals$ema[jj] <- K3 * vals$ema[jj-1] + (1-K3) * vals$x[jj]
else
vals$ema[jj] <- K2 * vals$ema[jj-1] + (1-K2) * vals$x[jj]
Так как ни один из ответов я получил решить эту проблему, я пошел искать в TTR пакет, который делает EMA, и он делает их быстрее, чем цикл в R. Что делает TTR, это падение на C и цикл там: https://github.com/joshuaulrich/TTR/blob/master/src/moving_averages.c Мой вопрос все равно: вы можете сделать итеративный расчет в R без использования цикла? –