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) <[EMAIL PROTECTED]> Fax-to-email: +44 (0)870 094 0861 Date: 23-Oct-08 Time: 21:51:04 ------------------------------ XFMail ------------------------------ ______________________________________________ R-help@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.