[R-es] Combinaciones de m elementos tomados de n en n
rvaquerizo en analisisydecision.es
rvaquerizo en analisisydecision.es
Vie Dic 10 08:09:22 CET 2010
Hola,
El paquete gregmisc tiene la función combn que hace justo lo que necesitas:
#install.packages("gregmisc")
require(gregmisc)
combinations(4, 2)
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 1 4
[4,] 2 3
[5,] 2 4
[6,] 3 4
Saludos.
>
> Message: 3
> Date: Thu, 9 Dec 2010 21:55:35 +0000 (GMT)
> From: Fernando Sanchez <fernandsanche en yahoo.es>
> To: r-help-es en r-project.org
> Subject: [R-es] Combinaciones de m elementos tomados de n en n
> Message-ID: <665445.24198.qm en web28202.mail.ukl.yahoo.com>
> Content-Type: text/plain
>
> Hola a todos, como bien sabéis, se llama combinaciones de m elementos
> tomados de
> n en n (m ≥ n) a todas las agrupaciones posibles que pueden hacerse con
> los m
> elementos de forma que: no entran todos los elementos, no importa el orden
> y no
> se repiten los elementos.
> Â
> En mi caso, quiero hacer una lista que contenga todas las combinaciones de
> m
> elementos tomados de n en n. He programado el siguiente código que creo
> es
> correcto:
> Â
> a<-0
> b<-0
> for (i in 1:18) {
> Â Â Â Â Â Â Â Â Â Â Â for (j in 1:17) {
> Â Â Â Â Â Â Â Â Â Â Â for (k in 1:16) {
> Â Â Â Â Â Â Â Â Â Â Â for (l in 1:15) {
> Â Â Â Â Â Â Â Â Â Â Â for (m in 1:14) {
> Â Â Â Â Â Â Â Â Â Â Â for (n in 1:13) {
> Â Â Â Â Â Â Â Â Â Â Â for (o in 1:12) {
> Â Â Â Â Â Â Â Â Â Â Â for (p in 1:11) {
> if(i!=j & i!=k & i!=l & i!=m & i!=n & i!=o & i!=p & j!=k & j!=l & j!=m &
> j!=n &
> j!=o & j!=p & k!=l & k!=m & k!=n & k!=o & k!=p ) {
> # hago dos if por claridad y longitud de la instrucción
> if(l!=m & l!=n & l!=o & l!=p & m!=n & m!=o & m!=p & n!=o & n!=p & o!=p) {
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
> Â Â Â Â Â Â Â Â Â Â Â b<-cbind(i,j,k,l,m,n,o,p)
> Â
> Â Â Â Â Â Â Â Â Â Â Â a<-rbind(a,b)
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â Â Â Â Â Â Â Â Â Â Â }
> Â
> Este código tiene desde mi punto de vista dos problemas:
> a-Â Â Â Â Â Tarda mucho en ejecutarse.
> b-Â Â Â Â No es elegante.
> Â
> Mi pregunta es: ¿se os ocurre alguna forma más sencilla de hacer lo
> mismo?
> Â
> Saludos y muchas gracias,
> Â
> Fernando
>
>
>
Raúl Vaquerizo Romero
www.analisisydecision.es
Más información sobre la lista de distribución R-help-es