Anpassung des Codes von https://stat.ethz.ch/pipermail/r-help/2010-December/261947.html
können Sie dann eine bedingte Funktion Schleife durch das Array hinzufügen. Wenn die Partikelposition innerhalb eines Radius (oder eines Quadrats für den Zweck dieses Beispiels) liegt, können Sie ein zweites zufälliges Ereignis hinzufügen. Wenn dies wahr ist, erhält das Partikel einen zusätzlichen Schritt in diese Richtung, wenn falsch - nicht.
RW2D<-function(N) { i<-0 xdir<-0 ydir<-0 xpos<-vector() xpos[1]<-xdir ypos<-vector() ypos[1]<-ydir for (i in 1:N-1)
attraction_points <- my.array <- array(1:24, dim=c(2))
{
r<-runif(1)
if(r<=0.25) {xdir<-xdir+1}
if(r>0.25 && r<=0.5) {xdir<-xdir-1}
if(r>0.5 && r<=0.75) {ydir<-ydir +1}
if(r>0.75) {ydir<-ydir-1}
for (j in 1:24){
if (abs(attraction_points[j,0]-xpos) < 4){
if (abs(attraction_points[j,1]-ypos) < 4){
if(runif(1)<=0.5) {xdir<-xdir+ 1*sign(attraction_points[j,0]-xpos)}
if(runif(1)<=0.5) {ydir<-ydir+ 1*sign(attraction_points[j,1]-ypos)}
}
}
}
xpos[i+1]<-xdir
ypos[i+1]<-ydir
} return(cbind(xpos,ypos)) } rw<-RW2D(10000)
xmin<-min(rw[,1]) xmax<-max(rw[,1]) ymin<-min(rw[,2]) ymax<-max(rw[,2])
plot(rw[,1],rw[,2],type="l",xlab="x",ylab="y",main="Random Walk Simulation In Two Dimensions",col="green4",xlim=range(xmin:xmax),ylim=range(ymin:ymax))
end<-cbind(rw[10000,1],rw[10000,2]) start<-cbind(0,0)
points(start,pch=4,col="red") points(end,pch=4,col="red")
NB Ich habe laufen nicht den Code selbst, aber das sollte die Idee veranschaulichen, und Sie sollten yoruself irgendwelche Fehler beheben können.