Dan, Still maybe a bit ugly, but no looping...
> unique(as.data.frame(t(apply(expand.grid(0:2, 0:2, 0:2), 1, sort)))) V1 V2 V3 1 0 0 0 2 0 0 1 3 0 0 2 5 0 1 1 6 0 1 2 9 0 2 2 14 1 1 1 15 1 1 2 18 1 2 2 27 2 2 2 Best, Erik > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] > On Behalf Of Dan Halligan > Sent: Thursday, September 17, 2009 3:31 PM > To: r-help@r-project.org > Subject: [R] generating unordered combinations > > Hi, > > I am trying to generate all unordered combinations of a set of > numbers / characters, and I can only find a (very) clumsy way of doing > this using expand.grid. For example, all unordered combinations of > the numbers 0, 1, 2 are: > 0, 0, 0 > 0, 0, 1 > 0, 0, 2 > 0, 1, 1 > 0, 1, 2 > 0, 2, 2 > 1, 1, 1 > 1, 1, 2 > 1, 2, 2 > 2, 2, 2 > > (I have not included, for example, 1, 0, 0, since it is equivalent to > 0, 0, 1). > > I have found a way to generate this data.frame using expand.grid as > follows: > > g <- expand.grid(c(0,1,2), c(0,1,2), c(0,1,2)) > for(i in 1:nrow(g)) { > g[i,] <- sort(as.character(g[i,])) > } > o <- order(g$Var1, g$Var2, g$Var3) > unique(g[o,]). > > This is obviously quite clumsy and hard to generalise to a greater > number of characters, so I'm keen to find any other solutions. Can > anyone suggest a better (more general, quicker) method? > > Cheers > > ______________________________________________ > 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.