Skip to Content

combn {utils}

Generate All Combinations of n Elements, Taken m at a Time
R 3.0.2


Generate all combinations of the elements of x taken m at a time. If x is a positive integer, returns all combinations of the elements of seq(x) taken m at a time. If argument FUN is not NULL, applies a function given by the argument to each point. If simplify is FALSE, returns a list; otherwise returns an array, typically a matrix. ... are passed unchanged to the FUN function, if specified.


combn(x, m, FUN = NULL, simplify = TRUE, ...)


vector source for combinations, or integer n for x <- seq_len(n).
number of elements to choose.
function to be applied to each combination; default NULL means the identity, i.e., to return the combination (vector of length m).
logical indicating if the result should be simplified to an array (typically a matrix); if FALSE, the function returns a list. Note that when simplify = TRUE as by default, the dimension of the result is simply determined from FUN(<var>1st combination</var>) (for efficiency reasons). This will badly fail if FUN(u) is not of constant length.
optionally, further arguments to FUN.


a list or array, see the simplify argument above. In the latter case, the identity dim(combn(n, m)) == c(m, choose(n, m)) holds.


Nijenhuis, A. and Wilf, H.S. (1978) Combinatorial Algorithms for Computers and Calculators; Academic Press, NY.

See Also

choose for fast computation of the number of combinations. expand.grid for creating a data frame from all combinations of factors or vectors.


combn(letters[1:4], 2)
(m <- combn(10, 5, min))   # minimum value in each combination
mm <- combn(15, 6, function(x) matrix(x, 2, 3))
stopifnot(round(choose(10, 5)) == length(m),
          c(2,3, round(choose(15, 6))) == dim(mm))
## Different way of encoding points:
combn(c(1,1,1,1,2,2,2,3,3,4), 3, tabulate, nbins = 4)
## Compute support points and (scaled) probabilities for a
## Multivariate-Hypergeometric(n = 3, N = c(4,3,2,1)) p.f.:
# table.mat(t(combn(c(1,1,1,1,2,2,2,3,3,4), 3, tabulate, nbins = 4)))
## Assuring the identity
for(n in 1:7)
 for(m in 0:n) stopifnot(is.array(cc <- combn(n, m)),
                         dim(cc) == c(m, choose(n, m)))


Scott Chasalow wrote the original in 1994 for S; R package combinat and documentation by Vince Carey; small changes by the R core team, notably to return an array in all cases of simplify = TRUE, e.g., for combn(5,5).

Documentation reproduced from R 3.0.2. License: GPL-2.