Skip to content
Related Articles

Related Articles

Improve Article

Calculate Combinations and Permutations in R

  • Last Updated : 16 May, 2021

Combinatorics is an important aspect of data analysis and statistics. It is used to solve many aptitude-based and real-life problems. While permutations do take into account the order, the combinations are independent of it. Therefore, permutation is considered to be an ordered combination. R language allows us the ability to invoke many packages to compute combinations and permutations. 

Method 1: Combinat package

Combinat package in R programming language can be used to calculate permutations and combinations of the numbers. It provides routines and methods to perform combinatorics. 

combn() method in R language belonging to this package is used to 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. 

Syntax:

combn(x, m, fun=NULL, simplify=TRUE, …)



Parameters : 

  • x – vector source for combinations
  • m – number of elements to be taken
  • fun – function to be applied to each combination (may be null)
  • simplify – logical, if FALSE, returns a list, otherwise returns vector or array

Example 1:

R




# using required libraries
library(combinat)
  
# generating combinations of the 
# alphabets taking 2 at a time
print ("Combination of letters two at a time")
combn(letters[1:4], 2)

Output

[1] "Combination of letters two at a time" 
> 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" 

Example 2:

R




# using required libraries
library(combinat)
  
# generating combinations of the
# alphabets taking 2 at a time
print ("Combination where x=m")
  
# selecting 8 items out of 8 
combn(8,8)

Output

[1] "Combination where x=m" 
> #selecting 8 items out of 8  
> combn(8,8) 
[1] 1 2 3 4 5 6 7 8 

The below code illustrates the method where m=1, that is, the number of chosen items is equivalent to 1. The number of ways to perform this operation is equivalent to the total number of items, since each item can be picked once. 



Example 3:

R




# using required libraries
library(combinat)
  
# generating combinations of 
# the alphabets taking 2 at a time
print ("Combination where m=1")
  
# selecting 1 items out of 10 
combn(10,1)

Output

[1] “Combination where m=1”    

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 

[1,]    1    2    3    4    5    6    7    8    9    10

The combn() method also provides a count of the number of combinations that will be generated as the output. Since the output is obtained in the form of a matrix, the final result is the number of columns in the matrix, given by ncol(res), where res is the result of combn() method application. 

Example 4:

R




# using required libraries
library(combinat)
  
# generating combinations of the
# alphabets taking 2 at a time
print ("Combination of letters two at a time")
res <- combn(letters[1:4], 2)
  
# calculate number of columns in 
# the result 
print ("Number of combinations : ")
print (ncol(res))

Output



[1] "Number of combinations : " 
> print (ncol(res)) 
[1] 6

permn() method in R generates all permutations of the elements of x. If x is a positive integer, returns all permutations of the elements of seq(x). The permutation of the number 0 is 1. 

Syntax:

permn(x, fun=NULL, …)

Parameters : 

  • x – vector source for combinations
  • fun – function to be applied to each permutation (may be null)

Example 1:

R




# using required libraries
library(combinat)
  
# generating permutations 
# of the numbers 3
print ("Permutations of 3")
permn(3)

Output

[1] "Permutations of 3"
[[1]] [1] 1 2 3  
[[2]] [1] 1 3 2 
[[3]] [1] 3 1 2 
[[4]] [1] 3 2 1  
[[5]] [1] 2 3 1  
[[6]] [1] 2 1 3

We can compute the permutations of a vector or a list too. 

Example 2:

R






# using required libraries
library(combinat)
  
# declaring a list
x <- c('red', 'blue', 'green', 'violet')
print ("Permutations of vector x")
permn(x)

Output:

[1] "Permutations of vector x" 
> permn(x)
[[1]] [1] "red"    "blue"   "green"  "violet" 
[[2]] [1] "red"    "blue"   "violet" "green"   
[[3]] [1] "red"    "violet" "blue"   "green"  
[[4]] [1] "violet" "red"    "blue"   "green"   
[[5]] [1] "violet" "red"    "green"  "blue"    
[[6]] [1] "red"    "violet" "green"  "blue"    
[[7]] [1] "red"    "green"  "violet" "blue"    
[[8]] [1] "red"    "green"  "blue"   "violet"  
[[9]] [1] "green"  "red"    "blue"   "violet"  
[[10]] [1] "green"  "red"    "violet" "blue"    
[[11]] [1] "green"  "violet" "red"    "blue"    
[[12]] [1] "violet" "green"  "red"    "blue"    
[[13]] [1] "violet" "green"  "blue"   "red"     
[[14]] [1] "green"  "violet" "blue"   "red"     
[[15]] [1] "green"  "blue"   "violet" "red"     
[[16]] [1] "green"  "blue"   "red"    "violet"  
[[17]] [1] "blue"   "green"  "red"    "violet"  
[[18]] [1] "blue"   "green"  "violet" "red"     
[[19]] [1] "blue"   "violet" "green"  "red"     
[[20]] [1] "violet" "blue"   "green"  "red"     
[[21]] [1] "violet" "blue"   "red"    "green"   
[[22]] [1] "blue"   "violet" "red"    "green"   
[[23]] [1] "blue"   "red"    "violet" "green"   
[[24]] [1] "blue"   "red"    "green"  "violet" 

Similar to combn() method, the number of permutations can also be determined by using the length() method over the output vector generated by permn() method. 

Example 3:

R




# using required libraries
library(combinat)
  
# declaring a list
x <- c('red', 'blue', 'green', 'violet')
print ("Permutations of vector x")
  
res <- permn(x)
print ("Number of possible permutations : ")
print (length(res))

Output

[1] “Number of possible permutations : ” 

> print (length(res)) 

[1] 24

Method 2: gtools package

Using gtools package in R programming language can also be used to calculate the permutations and combinations both without and with repetition easily. Combinatorics can be carried out easily using the gtools package in R. 

permutations() method in R can be used to easily calculate the permutations with and without replacement. It returns a data frame or a matrix of the possible permutations formed on shuffling the elements of the specified vector subjected to the constraints. The number of such possible permutations can be captured by using nrow() method, which returns the number of rows in the obtained output data frame. 



Syntax:

permutations(n , r, vec, repeats.allowed=F)

Parameters : 

  • n – no. of objects to choose from
  • r – no. of objects to choose
  • vec – the atomic vector or matrix to shuffle
  • repeats.allowed – By default : false. If true, the permutations are generated with repetition allowed

Return : 

A data frame or matrix with plausible permutations. The number of rows in the data frame is equivalent to the value of r.

Example 1:

R




library(gtools)
# describing the input vector
  
vec<- LETTERS[4:7]
  
# getting permutations on choose 2 
# letters out of 4 letters without 
# replacement
res <- permutations(n=4,r=2,v=vec)
print ("Permutations without replacement")
print (res)
  
print ("Number of permutations without replacement")
print (nrow(res))
  
# calculating permutations with replacement
res1 <- permutations(n=4,r=2,v=vec,repeats.allowed=T)
print ("Permutations with replacement")
print (res1)
  
print ("Number of permutations with replacement")
print (nrow(res1))

Output

[1] "Permutations without replacement"
     [,1] [,2]
[1,] "D"  "E"
[2,] "D"  "F"
[3,] "D"  "G"
[4,] "E"  "D"
[5,] "E"  "F"
[6,] "E"  "G"
[7,] "F"  "D"
[8,] "F"  "E"
[9,] "F"  "G"
[10,] "G"  "D"
[11,] "G"  "E"
[12,] "G"  "F"
[1] "Number of permutations without replacement"
[1] 12
[1] "Permutations with replacement"
     [,1] [,2]
[1,] "D"  "D"
[2,] "D"  "E"
[3,] "D"  "F"
[4,] "D"  "G"
[5,] "E"  "D"
[6,] "E"  "E"
[7,] "E"  "F"
[8,] "E"  "G"
[9,] "F"  "D"
[10,] "F"  "E"
[11,] "F"  "F"
[12,] "F"  "G"
[13,] "G"  "D"
[14,] "G"  "E"
[15,] "G"  "F"
[16,] "G"  "G"
[1] "Number of permutations with replacement"
[1] 16

Similarly, the combinations method can be used to generate possible combinations from the specified source vector. All the arguments are similar to the permutations() method. 

Syntax:



combinations(n , r, vec, repeats.allowed=F)

It is not mandatory to specify the input vector. 

Example 2:

R




library(gtools)
  
# generating combinations of the 
# alphabets taking 2 at a time
print ("Combination of five objects taken two at a time")
combinations(5, 2)

Output

[1] "Combination of five objects taken two at a time"
     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    1    5
[5,]    2    3
[6,]    2    4
[7,]    2    5
[8,]    3    4
[9,]    3    5
[10,]    4    5

Example 3:

R




library(gtools)
vec <- c(1:4)
  
# generating combinations of the 
# digits taking 2 at a time
print ("Combination of four objects taken two at\
a time without repetition")
res<- combinations(n= 4, r = 2, v = vec)
print (res)
  
print ("Number of combinations without repetition")
print (nrow(res))
  
print ("Combination of four objects taken two at a \
time with repetition")
res1 <- combinations(n= 4, r = 2, v = vec, repeats.allowed=T)
print (res1)
  
print ("Number of combinations with repetition")
print (nrow(res1))

Output

[1] "Combination of four objects taken two at a time without repetition"
    [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    1    4
[4,]    2    3
[5,]    2    4
[6,]    3    4
[1] "Number of combinations without repetition"
[1] 6
[1] "Combination of four objects taken two at a time with repetition"
     [,1] [,2]
[1,]    1    1
[2,]    1    2
[3,]    1    3
[4,]    1    4
[5,]    2    2
[6,]    2    3
[7,]    2    4
[8,]    3    3
[9,]    3    4
[10,]    4    4
[1] "Number of combinations with repetition"
[1] 10



My Personal Notes arrow_drop_up
Recommended Articles
Page :