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]]