Skip to content

combinations

2 messages · Michaell Taylor, robin hankin

#
I need to construct all possible combinations of an vector of length N taken
X at a time for simulation purposes.  Taking a a small vector as an example:
a,b,c
a,b,d
a,c,d
b,c,d

my only solution thus far is:

somefunction <- function(x){
      ...a series of grotesque and horribly inefficient loops
      deleted to save face.
      }

For my purposes, N=20 and X=5, meaning there are about 15k combinations.

I assumed this might be a common problem, but I am coming up empty on my searches
of the usual suspect web sites.

Thanks in advance for any pointers anyone may have.

Michaell
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
#
Hello Michaell


I've just written this, but it's a bit cranky.  I expect some guru
will improve my clunky eval(parse()) construction [and, come to think
of it, the equally clunky sapply() construction].


all the best 


robin


R> combinations(1:6,3)

should work, if


combinations <- function(vector,n) {
  bit <- c(0,1)
  string <- "binary <- expand.grid(bit"
  for(i in vector[-1]) {
    string <- paste(string,",bit")
  }
  string <- paste(string,")")

  eval(parse(text=string))
  wanted <- apply(binary,1,sum)==n
  binary <- binary[wanted,]>0

  f <- function(n){vector[binary[n,]]}
  return(t(sapply(1:dim(binary)[1],f)))
  }