Examples for 'utils::combn'


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

Aliases: combn

Keywords: utilities iteration

### ** Examples

combn(letters[1:4], 2)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "a"  "a"  "a"  "b"  "b"  "c" 
[2,] "b"  "c"  "d"  "c"  "d"  "d" 
(m <- combn(10, 5, min))   # minimum value in each combination
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[186] 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[223] 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 6
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)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,]    3    3    2    2    2    2    2    2    3     2     2     2     2     2
[2,]    0    0    1    1    1    0    0    0    0     1     1     1     0     0
[3,]    0    0    0    0    0    1    1    0    0     0     0     0     1     1
[4,]    0    0    0    0    0    0    0    1    0     0     0     0     0     0
     [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
[1,]     2     2     2     2     2     2     2     1     1     1     1     1
[2,]     0     1     1     1     0     0     0     2     2     1     1     1
[3,]     0     0     0     0     1     1     0     0     0     1     1     0
[4,]     1     0     0     0     0     0     1     0     0     0     0     1
     [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
[1,]     1     1     1     1     1     1     1     1     1     1     3     2
[2,]     2     1     1     1     1     1     1     0     0     0     0     1
[3,]     0     1     1     0     1     1     0     2     1     1     0     0
[4,]     0     0     0     1     0     0     1     0     1     1     0     0
     [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50]
[1,]     2     2     2     2     2     2     2     2     2     2     2     1
[2,]     1     1     0     0     0     1     1     1     0     0     0     2
[3,]     0     0     1     1     0     0     0     0     1     1     0     0
[4,]     0     0     0     0     1     0     0     0     0     0     1     0
     [,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62]
[1,]     1     1     1     1     1     1     1     1     1     1     1     1
[2,]     2     1     1     1     2     1     1     1     1     1     1     0
[3,]     0     1     1     0     0     1     1     0     1     1     0     2
[4,]     0     0     0     1     0     0     0     1     0     0     1     0
     [,63] [,64] [,65] [,66] [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74]
[1,]     1     1     2     2     2     2     2     2     1     1     1     1
[2,]     0     0     1     1     1     0     0     0     2     2     1     1
[3,]     1     1     0     0     0     1     1     0     0     0     1     1
[4,]     1     1     0     0     0     0     0     1     0     0     0     0
     [,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86]
[1,]     1     1     1     1     1     1     1     1     1     1     1     1
[2,]     1     2     1     1     1     1     1     1     0     0     0     2
[3,]     0     0     1     1     0     1     1     0     2     1     1     0
[4,]     1     0     0     0     1     0     0     1     0     1     1     0
     [,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98]
[1,]     1     1     1     1     1     1     1     1     1     1     1     1
[2,]     2     1     1     1     2     1     1     1     1     1     1     0
[3,]     0     1     1     0     0     1     1     0     1     1     0     2
[4,]     0     0     0     1     0     0     0     1     0     0     1     0
     [,99] [,100] [,101] [,102] [,103] [,104] [,105] [,106] [,107] [,108]
[1,]     1      1      0      0      0      0      0      0      0      0
[2,]     0      0      3      2      2      2      2      2      2      1
[3,]     1      1      0      1      1      0      1      1      0      2
[4,]     1      1      0      0      0      1      0      0      1      0
     [,109] [,110] [,111] [,112] [,113] [,114] [,115] [,116] [,117] [,118]
[1,]      0      0      0      0      0      0      0      0      0      0
[2,]      1      1      2      2      2      1      1      1      1      1
[3,]      1      1      1      1      0      2      1      1      2      1
[4,]      1      1      0      0      1      0      1      1      0      1
     [,119] [,120]
[1,]      0      0
[2,]      1      0
[3,]      1      2
[4,]      1      1
## 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)

[Package utils version 4.2.3 Index]