鉴于以下数据
N<-1000;
Px<-runif(N, min = 100, max = 120);
Vol<-runif(N, min = 1, max = 20)
我使用
生成一个从index = 1滚动的VWAP系列VWAP<-unlist(lapply(seq(1,length(Px)),function(x) sum(Px[1:x]*Vol[1:x])/sum(Vol[1:x])))
这适用于N <10000但是当N接近1M时效率显着降低。 有关更快实施的建议吗?
答案 0 :(得分:1)
您可以使用此语法,该语法不会在每次迭代时重新计算先前元素的总和:
N<-1000000;
Px<-runif(N, min = 100, max = 120);
Vol<-runif(N, min = 1, max = 20)
PxVol <- Px*Vol
SPxVol <- cumsum(PxVol)
SVol <- cumsum(Vol)
VWAP <- SPxVol/SVol