> library(gtools) > combinations(5,3) [,1] [,2] [,3] [1,] 1 2 3 [2,] 1 2 4 [3,] 1 2 5 [4,] 1 3 4 [5,] 1 3 5 [6,] 1 4 5 [7,] 2 3 4 [8,] 2 3 5 [9,] 2 4 5 [10,] 3 4 5
Robin Hankin a écrit : >Hi > >I want to enumerate all vectors of length "J", whose elements are >integers in the range 1 to S, without regard to ordering. > >With J=S=3, the combinations are as follows: > > > [,1] [,2] [,3] > [1,] 1 1 1 > [2,] 1 1 2 > [3,] 1 1 3 > [4,] 1 2 2 > [5,] 1 2 3 > [6,] 1 3 3 > [7,] 2 2 2 > [8,] 2 2 3 > [9,] 2 3 3 >[10,] 3 3 3 > > >Note that (eg) c(1,2,1) is not on the list because we already have >c(1,1,2) which would be equivalent [because the problem is to >enumerate the cases without regard to ordering] and I do not want >repeats. > >The best I can do is to create all S^J possibilities and weed out the >repeats, using unique() ; code below. > >Why is this no good? Well, even for the tiny case of J=S=10, this >would require a matrix of 10^10 rows, and my little linux machine >refuses to cooperate, complaining about allocating a vector of >length 1410065408. For these values of J and S, I happen to know >that the are 6360 distinct combinations, which is eminently handleable. > > >Anyone got any better ideas? > > > > > > >allcomb <- function(J,S){ > > f <- function(...) { > 1:S > } > out <- as.matrix(do.call("expand.grid", lapply(1:J, FUN = f))) > out <- t(apply(out,1,sort)) > unique(out) >} > > >-- >Robin Hankin >Uncertainty Analyst >National Oceanography Centre, Southampton >European Way, Southampton SO14 3ZH, UK > tel 023-8059-7743 > >______________________________________________ >R-help@stat.math.ethz.ch mailing list >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > > > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html