9.1. Permutations and Combinations

9.1.1. Factorial

> factorial(4)
[1] 24
> factorial(1:4)
[1]  1  2  6 24

There is also a method to compute the log of a factorial:

> lfactorial(1:4)
[1] 0.0000000 0.6931472 1.7917595 3.1780538
> exp(lfactorial(1:4))
[1]  1  2  6 24

9.1.2. Gamma Function

This is a generalization of factorial gamma(n) = factorial(n-1).

> gamma(1:10)
 [1]      1      1      2      6     24    120    720   5040  40320 362880
> factorial(0:9)
 [1]      1      1      2      6     24    120    720   5040  40320 362880
> gamma(1.5)
[1] 0.8862269
> factorial(.5)
[1] 0.8862269

9.1.3. Binomial coefficients

Number of ways to choose 2 balls from an urn containing 4 balls:

> choose(4, 2)
[1] 6

Binomial coefficients:

> n <- 1; choose(n, 0:n)
[1] 1 1
> n <- 2; choose(n, 0:n)
[1] 1 2 1
> n <- 3; choose(n, 0:n)
[1] 1 3 3 1
> n <- 4; choose(n, 0:n)
[1] 1 4 6 4 1
> n <- 5; choose(n, 0:n)
[1]  1  5 10 10  5  1

Another way using foreach:

> n <- 1; unlist(foreach(i=0:n) %do% choose(n,i))
[1] 1 1
> n <- 2; unlist(foreach(i=0:n) %do% choose(n,i))
[1] 1 2 1
> n <- 3; unlist(foreach(i=0:n) %do% choose(n,i))
[1] 1 3 3 1
> n <- 4; unlist(foreach(i=0:n) %do% choose(n,i))
[1] 1 4 6 4 1
> n <- 5; unlist(foreach(i=0:n) %do% choose(n,i))
[1]  1  5 10 10  5  1
> n <- 6; unlist(foreach(i=0:n) %do% choose(n,i))
[1]  1  6 15 20 15  6  1
> n <- 7; unlist(foreach(i=0:n) %do% choose(n,i))
[1]  1  7 21 35 35 21  7  1
> n <- 8; unlist(foreach(i=0:n) %do% choose(n,i))
[1]  1  8 28 56 70 56 28  8  1

Working with natural log of choose(n,k):

> choose(10, 0:10)
 [1]   1  10  45 120 210 252 210 120  45  10   1
> lchoose(10, 0:10)
 [1] 0.000000 2.302585 3.806662 4.787492 5.347108 5.529429 5.347108 4.787492 3.806662 2.302585 0.000000
> exp(lchoose(10, 0:10))
 [1]   1  10  45 120 210 252 210 120  45  10   1

9.1.4. Permutations

All permutations of 3 elements:

> permutations(3)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    1    3
[3,]    2    3    1
[4,]    1    3    2
[5,]    3    1    2
[6,]    3    2    1

9.1.5. Combinations

Listing all combinations of k elements chosen from n elements.

6 ways to choose 2 out of 4 elements:

> combn(4, 2)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    1    1    2    2    3
[2,]    2    3    4    3    4    4

4 ways to choose 3 out of 4 elements:

> combn(4, 3)
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    2
[2,]    2    2    3    3
[3,]    3    4    4    4

Only one way to choose 4 out of 4 elements:

> combn(4,4)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4