проблема в том, что R не знает, что v
будет вектором, потому что вы определяете v
как первый компонент r
в квадрате. Следовательно, R считает, что v
имеет только один элемент, и проблема возникает, когда вы пытаетесь получить доступ к v[2]
внутри цикла.
Попробуйте это:
sigma.ewma=function(r, lambda) {
v <- r
v[1] <- r[1]^2
for (i in 2:length(r)) {
v[i]=lambda*v[i-1]+(1-lambda)*r[i-1]^2
}
return(sqrt(v))
}
sigma.ewma(r, 0.94)
SPY.Close
2000-01-03 0.01000000
2000-01-04 0.01000000
2000-01-05 0.01376514
2000-01-06 0.01335298
2000-01-07 0.01354083
2000-01-10 0.01906738