我正在尝试改进函数的运行时(即删除for循环),但这个对我来说很难。我需要在范围内应用我的ema功能,并且无法想出一种向它进行矢量化的方法。
有没有办法在没有for循环的情况下返回第二个函数?
ema<-function(v,n,a){
# v: a data vector
# n: a scalar constant
# a: a vector length v of contants
expt<-c(0:(n-1))
as<-c(1-a)
avevec<-c(as^expt)
sum(avevec*v)/sum(avevec)
}
betaema<-function(v,n,a,l){
# v: a data vector
# n: a vector length v of contants
# a: a vector length v of contants
# l: a contant, the first value that can have a moving average
secondvec<-c(rep(0, (length(v)-l)))
for(i in l:(length(v)-l)){
secondvec[i+1-l]<-ema(v[(i-n[i]+1):i],n[i],a[(i-n[i]+1):i])
}
secondvec
}