確率過程シミュレーターを作成しましたが、かなり遅いので高速化したいと思います。
シミュレーターの主要部分は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}
}
これは、反復ごとにrandの値を更新し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できない場合、すべてのコアを使用して高速化できるようにループを書き直すには、他にどのような方法がありますか?