combinations enumerates the possible combinations of a specified size from the elements of a vector. permutations enumerates the possible permutations.

combinations(n, r, v = 1:n, set = TRUE, repeats.allowed = FALSE)

permutations(n, r, v = 1:n, set = TRUE, repeats.allowed = FALSE)

Arguments

n

Size of the source vector

r

Size of the target vectors

v

Source vector. Defaults to 1:n

set

Logical flag indicating whether duplicates should be removed from the source vector v. Defaults to TRUE.

repeats.allowed

Logical flag indicating whether the constructed vectors may include duplicated values. Defaults to FALSE.

Value

Returns a matrix where each row contains a vector of length r.

Details

Caution: The number of combinations and permutations increases rapidly with n and r!.

To use values of n above about 45, you will need to increase R's recursion limit. See the expression argument to the options command for details on how to do this.

Taken from an email by Brian D Ripley <[email protected]> to r-help dated Tue, 14 Dec 1999 11:14:04 +0000 (GMT) in response to Alex Ahgarin [email protected]. Original version was named "subsets" and was Written by Bill Venables.

References

Venables, Bill. "Programmers Note", R-News, Vol 1/1, Jan. 2001. https://cran.r-project.org/doc/Rnews/

See also

Author

Original versions by Bill Venables [email protected]. Extended to handle repeats.allowed by Gregory R. Warnes [email protected].

Examples


combinations(3,2,letters[1:3])
#>      [,1] [,2]
#> [1,] "a"  "b" 
#> [2,] "a"  "c" 
#> [3,] "b"  "c" 
combinations(3,2,letters[1:3],repeats=TRUE)
#>      [,1] [,2]
#> [1,] "a"  "a" 
#> [2,] "a"  "b" 
#> [3,] "a"  "c" 
#> [4,] "b"  "b" 
#> [5,] "b"  "c" 
#> [6,] "c"  "c" 

permutations(3,2,letters[1:3])
#>      [,1] [,2]
#> [1,] "a"  "b" 
#> [2,] "a"  "c" 
#> [3,] "b"  "a" 
#> [4,] "b"  "c" 
#> [5,] "c"  "a" 
#> [6,] "c"  "b" 
permutations(3,2,letters[1:3],repeats=TRUE)
#>       [,1] [,2]
#>  [1,] "a"  "a" 
#>  [2,] "a"  "b" 
#>  [3,] "a"  "c" 
#>  [4,] "b"  "a" 
#>  [5,] "b"  "b" 
#>  [6,] "b"  "c" 
#>  [7,] "c"  "a" 
#>  [8,] "c"  "b" 
#>  [9,] "c"  "c" 

if (FALSE) { # \dontrun{
# To use large 'n', you need to change the default recusion limit
options(expressions=1e5)
cmat <- combinations(300,2)
dim(cmat) # 44850 by 2 
} # }