Generate all combinations of the elements of
at a time. If
x is a positive integer, returns all
combinations of the elements of
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
... are passed unchanged to the
FUN function, if specified.
vector source for combinations, or integer
number of elements to choose.
function to be applied to each combination; default
logical indicating if the result should be simplified
optionally, further arguments to
x are accepted from R 3.1.0 (although coincidentally
they worked for
simplify = FALSE in earlier versions).
array, see the
argument above. In the latter case, the identity
dim(combn(n, m)) == c(m, choose(n, m)) holds.
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
simplify = TRUE, e.g., for
Nijenhuis, A. and Wilf, H.S. (1978) Combinatorial Algorithms for Computers and Calculators; Academic Press, NY.
choose for fast computation of the number of
expand.grid for creating a data frame from
all combinations of factors or vectors.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
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)))