我写了一个随机过程模拟器,但我想加快它,因为它很慢。
模拟器的主要部分是由一个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}
}
这意味着在每次迭代中,我都会更新 and 的值,r
并且s
在两个结果之一中,填充我的 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
其他方式让我重新编写循环以便能够使用所有内核并加快速度?