combn
Generate All Combinations of n Elements, Taken m at a Time
Description
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.
Usage
combn(x, m, FUN = NULL, simplify = TRUE, ...)
Arguments
x | vector source for combinations, or integer |
m | number of elements to choose. |
FUN | function to be applied to each combination; default |
simplify | logical indicating if the result should be simplified to an |
... | optionally, further arguments to |
Details
Factors x
are accepted.
Value
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.
Author(s)
Scott Chasalow wrote the original in 1994 for S; R package combinat and documentation by Vince Carey [email protected]; small changes by the R core team, notably to return an array in all cases of simplify = TRUE
, e.g., for combn(5,5)
.
References
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.
Examples
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), is.array(m), # 1-dimensional 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)), identical(cc, combn(n, m, identity)) || m == 1)
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.