Calcula combinaciones y permutaciones en R

La combinatoria es un aspecto importante del análisis de datos y las estadísticas. Se utiliza para resolver muchos problemas basados ​​en aptitudes y de la vida real. Mientras que las permutaciones tienen en cuenta el orden, las combinaciones son independientes de él. Por lo tanto, la permutación se considera una combinación ordenada. El lenguaje R nos permite la capacidad de invocar muchos paquetes para calcular combinaciones y permutaciones. 

Método 1: paquete combinado

El paquete Combinat en el lenguaje de programación R se puede utilizar para calcular permutaciones y combinaciones de números. Proporciona rutinas y métodos para realizar combinatoria. 

El método combn() en lenguaje R perteneciente a este paquete se usa para generar todas las combinaciones de los elementos de x tomados m a la vez. Si x es un entero positivo, devuelve todas las combinaciones de los elementos de seq(x) tomadas m a la vez. 

Sintaxis:

combn(x, m, fun=NULL, simplificar=VERDADERO, …)

Parámetros: 

  • x – fuente vectorial para combinaciones
  • m – número de elementos a tomar
  • fun – función que se aplicará a cada combinación (puede ser nula)
  • simplificar: lógico, si es FALSO, devuelve una lista; de lo contrario, devuelve un vector o una array

Ejemplo 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)

Producción

[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" 

Ejemplo 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)

Producción

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

El siguiente código ilustra el método donde m=1, es decir, el número de elementos elegidos es equivalente a 1. El número de formas de realizar esta operación es equivalente al número total de elementos, ya que cada elemento se puede seleccionar una vez. 

Ejemplo 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)

Producción

[1] “Combinación donde m=1”    

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

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

El método combn() también proporciona un recuento del número de combinaciones que se generarán como salida. Dado que la salida se obtiene en forma de array, el resultado final es el número de columnas de la array, dado por ncol(res), donde res es el resultado de la aplicación del método combn(). 

Ejemplo 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))

Producción

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

El método permn() en R genera todas las permutaciones de los elementos de x. Si x es un entero positivo, devuelve todas las permutaciones de los elementos de seq(x). La permutación del número 0 es 1. 

Sintaxis:

permanente(x, divertido=NULL, …)

Parámetros: 

  • x – fuente vectorial para combinaciones
  • fun – función que se aplicará a cada permutación (puede ser nula)

Ejemplo 1:

R

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

Producción

[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

También podemos calcular las permutaciones de un vector o una lista. 

Ejemplo 2:

R

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

Producción:

[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 al método combn(), el número de permutaciones también se puede determinar usando el método length() sobre el vector de salida generado por el método permn(). 

Ejemplo 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))

Producción

[1] “Número de permutaciones posibles:” 

> imprimir (longitud(res)) 

[1] 24

Método 2: paquete gtools

El uso del paquete gtools en el lenguaje de programación R también se puede usar para calcular fácilmente las permutaciones y combinaciones tanto sin como con repetición. La combinatoria se puede llevar a cabo fácilmente usando el paquete gtools en R. 

El método permutations() en R se puede usar para calcular fácilmente las permutaciones con y sin reemplazo. Devuelve un marco de datos o una array de las posibles permutaciones formadas al mezclar los elementos del vector especificado sujeto a las restricciones. El número de tales permutaciones posibles se puede capturar utilizando el método nrow(), que devuelve el número de filas en el marco de datos de salida obtenido. 

Sintaxis:

permutaciones(n, r, vec, repeticiones.permitido=F)

Parámetros: 

  • n-no. de objetos para elegir
  • r- no. de objetos a elegir
  • vec – el vector atómico o array para barajar
  • repite.permitido – Por defecto: falso. Si es verdadero, las permutaciones se generan con repetición permitida

Devolver : 

Un marco de datos o array con permutaciones plausibles. El número de filas en el marco de datos es equivalente al valor de r.

Ejemplo 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))

Producción

[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

De manera similar, el método de combinaciones se puede utilizar para generar posibles combinaciones a partir del vector fuente especificado. Todos los argumentos son similares al método permutations(). 

Sintaxis:

combinaciones(n, r, vec, repeticiones.permitido=F)

No es obligatorio especificar el vector de entrada. 

Ejemplo 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)

Producción

[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

Ejemplo 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))

Producción

[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

Publicación traducida automáticamente

Artículo escrito por yippeee25 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *