Hi. If I understood you correctly here is one approach to your solution: > k <- 5 > mat <- diag(1,nrow=k,ncol=k) > set.seed(10) > samp <- mat[sample(1:k,3,rep=FALSE),] > samp [,1] [,2] [,3] [,4] [,5] [1,] 0 0 1 0 0 [2,] 0 1 0 0 0 [3,] 0 0 0 1 0 > #check > apply(samp,1,sum) [1] 1 1 1 > apply(samp,2,sum) [1] 0 1 1 1 0
I hope this helps Andrija On Sat, Feb 4, 2012 at 4:27 PM, Alaios <ala...@yahoo.com> wrote: > Dear all, > I would like to create a k,n matrix which that will include > > > > - k random elements with value 1 > -all rest zeros > > -one single "1" in each row > > - each column will have maximum one "1" > > > so far I have a so stupid function that with nested while tries to fit k > numbers randomly in a row by row fashion, checking also if the c column rule > is violated. In that case there is also another loop that will try to find a > new solution. > > That way it takes ages, as it is natural to complete a matrix of 300,512 as > the new ones conflict all the time. > > I am trying to find an easy way to make this algorithm way simpler that will > help me reduce the time needed. > I was thinking then if R can help me by shuffling number from 1 to 300 > randomly, so to avoid the first loop that does that goes row by row.. and > then find an easy way to check if the column rule is violated. > > Do you think that you can spend some time help me? > > Have a nice weekend > > Regards > Alex > > [[alternative HTML version deleted]] > > > ______________________________________________ > 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. > ______________________________________________ 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.