Sample uniformly within a fixed radius.

May 16, 2014
By

(This article was first published on Quantitative Ecology, and kindly contributed to R-bloggers)

I was asked how to do this today and thought that I would share the answer:


## Sample points uniformly within a fixed radius

nrand=1000
maxstep=10

## Sample data
## NB: To get a truly uniform sample over the circle, you must
## sample the square of the distance and then transform back.
tempdat<-data.frame(X0=0,Y0=0, bearing0=0,
bad.dist= runif(nrand)*maxstep,
dist2=sqrt(runif(nrand)*maxstep^2),
turningangle=runif(nrand)*2*pi-pi)

##convert Turning angle to bearing (in this case no change)
tempdat$bearing=tempdat$bearing0+tempdat$turningangle

## Convert from polar to cartesian coordinates
tempdat$X<-tempdat$X0+tempdat$dist2*sin(tempdat$bearing)
tempdat$Y<-tempdat$Y0+tempdat$dist2*cos(tempdat$bearing)

tempdat$Xbad<-tempdat$X0+tempdat$bad.dist*sin(tempdat$bearing)
tempdat$Ybad<-tempdat$Y0+tempdat$bad.dist*cos(tempdat$bearing)


##make plots
png(filename="sampleplots.png",width=500,height=1000)
par(mfrow=c(2,1))
plot(Ybad~Xbad, data=tempdat, asp=1, main="Center is oversampled")
plot(Y~X, data=tempdat, asp=1, main="Uniform across space")
dev.off()

To leave a comment for the author, please follow the link and comment on their blog: Quantitative Ecology.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.

Sponsors

Mango solutions





RStudio homepage

Zero Inflated Models and Generalized Linear Mixed Models with R

Quantide: statistical consulting and training



http://www.eoda.de









ODSC

CRC R books series













Contact us if you wish to help support R-bloggers, and place your banner here.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)