Dear all, I have two coordinates vectors, say X and Y of length n. I want to generate for each couple of coordinates X1,Y1 X2,Y2 X3,Y3....Xn,Yn a random coordinate which is located in a square define as X +/- dx and Y +/- dy. I saw the runif function which can generate for just one value at a time what I want : runif(1, X - dx, X + dx) for X and runif(1, Y - dy, Y + dy) for Y. I would like to know if there is not a more powerfull way in R to generate directly the set of random coordinates. Regards -- Emmanuel Poizot
Change 1 to some other number to get more points from runif() More generally, take a look at "An Introduction to R" and read most everything you can find on the topic of vectorization. If you don't know how to get "An Introduction to R", try typing help.start() at your prompt and it should happen automatically. Cheers, Michael On Wed, Oct 10, 2012 at 3:15 PM, Poizot Emmanuel <emmanuel.poizot at cnam.fr> wrote:> Dear all, > > I have two coordinates vectors, say X and Y of length n. > I want to generate for each couple of coordinates X1,Y1 X2,Y2 X3,Y3....Xn,Yn > a random coordinate which is located in a square define as X +/- dx and Y > +/- dy. > I saw the runif function which can generate for just one value at a time > what I want : runif(1, X - dx, X + dx) for X and runif(1, Y - dy, Y + dy) > for Y. > I would like to know if there is not a more powerfull way in R to generate > directly the set of random coordinates. > Regards > > -- > Emmanuel Poizot > > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
On 10-10-2012, at 16:15, Poizot Emmanuel <emmanuel.poizot at cnam.fr> wrote:> Dear all, > > I have two coordinates vectors, say X and Y of length n. > I want to generate for each couple of coordinates X1,Y1 X2,Y2 X3,Y3....Xn,Yn a random coordinate which is located in a square define as X +/- dx and Y +/- dy. > I saw the runif function which can generate for just one value at a time what I want : runif(1, X - dx, X + dx) for X and runif(1, Y - dy, Y + dy) for Y. > I would like to know if there is not a more powerfull way in R to generate directly the set of random coordinates.Yes there is. Just do ?runif to get help on runif. Berend
On Wed, Oct 10, 2012 at 4:09 PM, Poizot Emmanuel <emmanuel.poizot at cnam.fr> wrote:> Le 10/10/2012 17:02, R. Michael Weylandt a ?crit : >> >> Change 1 to some other number to get more points from runif() >> >> More generally, take a look at "An Introduction to R" and read most >> everything you can find on the topic of vectorization. If you don't >> know how to get "An Introduction to R", try typing help.start() at >> your prompt and it should happen automatically. >> >> Cheers, >> Michael >> >> On Wed, Oct 10, 2012 at 3:15 PM, Poizot Emmanuel >> <emmanuel.poizot at cnam.fr> wrote: >>> >>> Dear all, >>> >>> I have two coordinates vectors, say X and Y of length n. >>> I want to generate for each couple of coordinates X1,Y1 X2,Y2 >>> X3,Y3....Xn,Yn >>> a random coordinate which is located in a square define as X +/- dx and Y >>> +/- dy. >>> I saw the runif function which can generate for just one value at a time >>> what I want : runif(1, X - dx, X + dx) for X and runif(1, Y - dy, Y + >>> dy) >>> for Y. >>> I would like to know if there is not a more powerfull way in R to >>> generate >>> directly the set of random coordinates. >>> Regards >>> >>> -- >>> Emmanuel Poizot >>> > > If I put say 10 as first argument of runif, I will have 10 random values in > a square of size X - dx, X + dx and Y - dy, Y + dy for example. That not > want I'm looking for. I would like to have just one random coordinate in > this square but for each couple of coordinates X1,Y1 X2,Y2 X3,Y3....Xn,Yn. > Hope it's more clear. >Yes, In that case, just stick your X1, X2, etc. in a vector; same with Y1, Y2. and pass those to runif() as well. E.g., X <- c(1,2,3,4,5) Y <- c(5,4,3,2,1) x_points <- runif(5, X-1, X+1) y_points <- runif(5, Y-1, Y+1) and it will work. You can even wrap this in a function points_maker <- function(X, Y, dx = 0.1, dy = dx, n = max(length(X), length(Y)){ cbind(x = runif(n, X - dx, X + dx), y = runif(n, Y - dy, Y + dy)) } but it might take you a few hours all of what's going on there. Reading the tutorial I pushed will certainly help with that as well. Cheers, Michael