確率過程シミュレーターを作成しましたが、かなり遅いので高速化したいと思います。
シミュレーターの主要部分はfor
ループで構成されていますが、これforeach
を `%dopar%.
単純化されたループでそうしようとしましたが、いくつかの問題が発生しています。私のfor
ループがこのように見えるとします
library(foreach)
r=0
t<-rep(0,500)
for(n in 1:500){
s<-1/2+r
u<-runif(1, min = 0, max = 1)
if(u<s){
t[n]<-u
r<-r+0.001
}else{r<-r-0.001}
}
これは、反復ごとにr
andの値を更新しs
、2 つの結果のいずれかで vectorを設定することを意味しt
ます。ループとして書き直すいくつかの異なる方法を試しましたforeach
が、繰り返しのたびに値が更新されず、かなり奇妙な結果が得られるようです。使ってみreturn
たけど効果なし!
これは私が思いついた例です。
rr=0
tt<-foreach(i=1:500, .combine=c) %dopar% {
ss<-1/2+rr
uu<-runif(1, min = 0, max = 1)
if(uu<=ss){
return(uu)
rr<-rr+0.001
}else{
return(0)
rr<-rr-0.001}
}
使用foreach
できない場合、すべてのコアを使用して高速化できるようにループを書き直すには、他にどのような方法がありますか?