2016-02-15 5 views
0

Учитывая следующие данныеR: Быстрее прокатки VWAP

N<-1000; 
Px<-runif(N, min = 100, max = 120); 
Vol<-runif(N, min = 1, max = 20) 

сгенерировать серию VWAP прокатки из индекса = 1 с

VWAP<-unlist(lapply(seq(1,length(Px)),function(x) sum(Px[1:x]*Vol[1:x])/sum(Vol[1:x]))) 

Это хорошо работает для N < 10000, но, как N приближается к 1М эффективность резко снижается. Любые предложения для более быстрой реализации?

+0

@HubertL Perfect, спасибо – user5199932

ответ

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 
Смежные вопросы