Fernando Sanchez
2010-Dec-09 21:55 UTC
[R-es] Combinaciones de m elementos tomados de n en n
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 [[alternative HTML version deleted]]
Fernando Sanchez
2010-Dec-09 22:00 UTC
[R-es] Combinaciones de m elementos tomados de n en n
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 [[alternative HTML version deleted]]
Fernando Sánchez
2010-Dec-09 22:12 UTC
[R-es] Combinaciones de m elementos tomados de n en n
Hola, quiero pedir disculpas por mi correo anterior, no sé muy bien qué ha ocurrido con el código R que copié y pegué. Os envío de nuevo el texto ! mil disculpas a todos los suscritos a la lista! 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 [[alternative HTML version deleted]]
Mira por ejemplo la funci—n combinations del paquete gtools, es posible que ayude a solucionar tu problema. > require(gtools) > m=3;n=5 > combinations(n,m) [,1] [,2] [,3] [1,] 1 2 3 [2,] 1 2 4 [3,] 1 2 5 [4,] 1 3 4 [5,] 1 3 5 [6,] 1 4 5 [7,] 2 3 4 [8,] 2 3 5 [9,] 2 4 5 [10,] 3 4 5 Un saludo. Olivier -- ____________________________________ Olivier G. Nu–ez Email: onunez en iberstat.es Tel : +34 663 03 69 09 Web: http://www.iberstat.es ____________________________________ El 09/12/2010, a las 22:55, Fernando Sanchez escribi—:> 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 > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es
Fernando Sanchez
2010-Dec-09 22:37 UTC
[R-es] Combinaciones de m elementos tomados de n en n
Hola Olivier, muchas gracias. Tu respuesta es exactamente lo que necesitaba. saludos, Fernando Mira por ejemplo la función combinations del paquete gtools, es posible que ayude a solucionar tu problema. > require(gtools) > m=3;n=5 > combinations(n,m) [,1] [,2] [,3] [1,] 1 2 3 [2,] 1 2 4 [3,] 1 2 5 [4,] 1 3 4 [5,] 1 3 5 [6,] 1 4 5 [7,] 2 3 4 [8,] 2 3 5 [9,] 2 4 5 [10,] 3 4 5 Un saludo. Olivier -- ____________________________________ Olivier G. Nuñez Email: onunez@iberstat.es Tel : +34 663 03 69 09 Web: http://www.iberstat.es ____________________________________ El 09/12/2010, a las 22:55, Fernando Sanchez escribió:> 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 &[[elided Yahoo spam]]> =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 > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es[[alternative HTML version deleted]]
rvaquerizo en analisisydecision.es
2010-Dec-10 07:09 UTC
[R-es] Combinaciones de m elementos tomados de n en n
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
Fernando Sanchez
2010-Dec-10 10:37 UTC
[R-es] Combinaciones de m elementos tomados de n en n
Muchas gracias, esta respuesta también resuelve completamente mi problema. saludos, Fernando ------------------------------------------------------------------------------------------ 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)> To: r-help-es@r-project.org > Subject: [R-es] Combinaciones de m elementos tomados de n en n > Message-ID: <665445.24198.qm@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? >[[alternative HTML version deleted]]