[R] R random number generation

(Ted Harding) Ted.Harding at manchester.ac.uk
Thu Oct 23 22:51:07 CEST 2008


On 23-Oct-08 19:58:12, hiphop wrote:
> 
> i have to generate random numbers from length 2 to 30 and
> length two should have the numbers 1,2 and length 3 should
> have the numbers 1,2,3 so on and so forth till size 30.
> i should get an sequence like 2222221 or 1111112 till both
> the values appear and for 3 it should be 1222223 or 3331112.
> i should get similar output for all sizes which means i should
> get 30 sequences.but am getting only one sequence.
> please help. this is my code
> 
> y=0;
> for (i in 1:3)
> {
> while(y!=i)
> {
> y=sample(1:3,replace=TRUE);
> }
> }

If I understand you correctly, the following should do what
you are looking for (i.e. sample repeatedly from (1:k) until
you first have all of 1:k in the sample, repetitions being
allowed):

  mksample <- function(k){
    All <- (1:k) ; Left <- rep(TRUE,k) ; Done <- FALSE
    Result <- NULL
    while(! Done){
      j <- sample(All,1)
      Result <- c(Result, j); Left[j] <- FALSE
      Done <- (sum(Left)==0)
    }
    Result
  }

Example:
  mksample(5)
# [1] 1 4 4 5 2 1 1 3

I'm not clear about why, in your illustrations (such as
"3331112") you presented it as a sequence of runs ("333",
"111","2") -- maybe this is not relevant to your query.

Hoping this helps,
Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at manchester.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 23-Oct-08                                       Time: 21:51:04
------------------------------ XFMail ------------------------------



More information about the R-help mailing list