Si puedes comentar la lógica de f5 (caso en el que haya varios valores
máximos), es que no la termino de entender...

Gracias,
Carlos.




El lun, 14 dic 2020 a las 12:25, Carlos Santos (<carlossantos....@gmail.com>)
escribió:

> gracias por tus comentarios.
>
> lo que dices es asi, excepto cuando hay varios máximos iguales entonces se
> ejecuta f5 para saber cual de ellos es el elegido, y a continuación se hace
> lo mismo que has puesto en la frase, es decir elegir el valor de la columna
> var que ocupa dicha posición del elegido
>
> gracias de todas formas, cualquier ayuda y comentario es de agradecer
>
>
>
>
> El lun, 14 dic 2020 a las 12:05, <l.gr...@pm.me> escribió:
>
> > Te quería echar una mano pero no veo el objetivo del proceso.
> >
> > A ver si lo voy entendiendo: "Supongamos que tenemos esta matriz, se
> > quiere conseguir para el mayor valor por fila tomar el valor de la
> posición
> > que ocupa la primera columna "Var" en base a la columna elegida y si hay
> > varios valores máximos iguales, entonces ejecutar la función "f5" para
> > elegir una y según valor máximo obtenido proceder de la misma manera que
> > antes."
> >
> > ¿Con eso quieres decir que buscas en la fila el valor máximo de las
> > columnas MX... (supongamos que es la columna MZ) y seleccionas el valor
> de
> > la columna var que ocupa dicha posición (la posición Z en este caso?. ¿Y
> en
> > caso de varios máximos eliges una de las columnas candidatas mediante la
> > función f5?. Y esa función f5 contiene una llamada a cohend, nada más.
> >
> > No sé, no acabo de entender la lógica de todo el proceso. Pero así, a
> > oscuras, data.table es más eficiente manejando grandes volúmenes de
> datos y
> > hacer un repeat tal vez no sea lo más rápido, sino aplicar vectorización
> > allá donde se pueda.
> >
> > Siento no poder ayudar más. Ánimo.
> >
> > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> >
> > El lunes, 14 de diciembre de 2020 a las 10:31, Carlos Santos <
> > carlossantos....@gmail.com> escribió:
> >
> > > gracias Emilio por tu ayuda, la selección es por fila, no por variable
> > >
> > > He intentado discriminar cuando solo encuentra una posición en la fila
> > que
> > >
> > > es el máximo, pero el ahorro de tiempo no es mucho aunque algo es algo
> > >
> > > Creo que el tiempo se consume en la parte del ELSE, y aunque entiendo
> que
> > >
> > > se tiene que leer toda la matriz fila a fila, no veo cómo hacer que
> > consuma
> > >
> > > menos tiempo
> > >
> > > Solo me quedaría probar dividir la matriz en trozos, para ver si en
> > proceso
> > >
> > > paralelo podría consumir menos tiempo, ya que cada fila es
> independiente
> > de
> > >
> > > otra fila.
> > >
> > > if (smc == 1) {
> > >
> > > data1$Clus.Multi.OPTIMO[fila] <-
> > >
> > > data1$Clus.Multi.MAX[max(data2[fila,(3:(rr+2))])]
> > >
> > > } else {
> > >
> > > RECEPTOR$clus <-
> > >
> > >
> >
> data2[which(as.vector(t(data2[fila,])[,1])==max(data2[fila,(3:(rr+2))]))-2,1][1]$Var
> > >
> > > RECEPTOR$dist <- mclapply((1:smc),f5) %>% unlist()
> > >
> > >     data1$Clus.Multi.OPTIMO[which(data1$Clus.Multi.MAX == EMISOR)] <-
> > >
> > >
> > > RECEPTOR[which.max(RECEPTOR[,2]),1]
> > >
> > > }
> > >
> > > Muchas gracias de nuevo Emilio
> > >
> > > Un saludo
> > >
> > > El lun, 14 dic 2020 a las 8:08, Emilio L. Cano (emilopezc...@gmail.com
> )
> > >
> > > escribió:
> > >
> > > > Hola,
> > > >
> > > > Para la primera parte (seleccionar los valores más altos de una
> > variable)
> > > >
> > > > yo usaría dplyr::slice_max(). Creo que eso debería ser rápido y con
> el
> > > >
> > > > filtro hecho lo demás debería ser trivial. Si he entendido bien el
> > problema.
> > > >
> > > > Un saludo,
> > > >
> > > > Emilio
> > > >
> > > > El 13 dic 2020, a las 15:31, Carlos Santos
> carlossantos....@gmail.com
> > > >
> > > > escribió:
> > > >
> > > > Perdón Carlos, con las prisas se me olvidó por completo añadir lo que
> > > >
> > > > > faltaba, tienes toda la razón
> > > > >
> > > > > Supongamos que tenemos esta matriz, se quiere conseguir para el
> mayor
> > > > >
> > > > > valor por fila tomar el valor de la posición que ocupa la primera
> > > > >
> > > > > columna "Var" en base a la columna elegida y si hay varios valores
> > > > >
> > > > > máximos iguales, entonces ejecutar la función "f5" para elegir una
> y
> > > > >
> > > > > según valor máximo obtenido proceder de la misma manera que antes.
> > > > >
> > > > > El problema es cuando tengo matrices de 3000x3000 o 10000x10000, y
> > > > >
> > > > > además los dígitos de la columna primera son superiores al puesto
> en
> > este
> > > > >
> > > > > ejemplo, entonces el tiempo de calculo es excesivo.
> > > > >
> > > > > <image.png>
> > > > >
> > > > > codigo:
> > > >
> > > > > f5 <- function(x){data1 %>% filter(Clus.Multi.OPTIMO %in%
> > > > >
> > > > > c(EMISOR,RECEPTOR[x])) %>%
> > > > >
> > > > > dplyr::select(1:numvar+1) %>% data.matrix() %>% CohenD()}
> > > > >
> > > > > fila = 1
> > > > >
> > > > > rr = nrow(data2)
> > > > >
> > > > > data1 <- data1 %>% mutate(Clus.Multi.OPTIMO=Clus.Multi.MAX)
> > > > >
> > > > > repeat{
> > > > >
> > > > > smc <-
> > > > >
> > > > >
> >
> sum(data2[fila,((2+fila):(nrow(data2)+2))]==max(data2[fila,((2+fila):(nrow(data2)+2))]))
> > > > >
> > > > > EMISOR <- data2[fila,1]$Var
> > > > >
> > > > > RECEPTOR <-
> > > > >
> > > > >
> >
> data2[which(as.vector(t(data2[fila,])[,1])==max(data2[fila,((2+fila):(nrow(data2)+2))]))-2,1]$Var
> > > > >
> > > > > Rmax <- RECEPTOR[mclapply((1:smc),f5) %>% unlist() %>% which.max()]
> > > > >
> > > > > data1$Clus.Multi.OPTIMO[which(data1$Clus.Multi.MAX ==
> > > > >
> > > > > data2[fila,1]$Var)] <- Rmax
> > > > >
> > > > > fila = fila + 1
> > > > >
> > > > > if (fila == rr) {break}
> > > > >
> > > > > }
> > > >
> > > > >
> >
> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
> > Libre
> > > > >
> > > > > de virus. www.avast.com
> > > > >
> > > > >
> >
> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
> > > > >
> > > > > El dom, 13 dic 2020 a las 12:49, Carlos Ortega (
> > c...@qualityexcellence.es)
> > > > >
> > > > > escribió:
> > > > >
> > > > > > Hola,
> > > > > >
> > > > > > Mejor si pones un ejemplo de tu matriz y cuentas lo que quieres
> > hacer...
> > > > > >
> > > > > > El enfoque puede ser muy diferente al que has planteado.
> > > > > >
> > > > > > Gracias,
> > > > > >
> > > > > > Calros Ortega
> > > > > >
> > > > > > www.qualityexcellence.es
> > > > > >
> > > > > > El dom, 13 dic 2020 a las 12:33, Carlos Santos (<
> > > > > >
> > > > > > carlossantos....@gmail.com>) escribió:
> > > > > >
> > > > > > > Buen dia,
> > > > > > >
> > > > > > > Tengo un problema cuando ejecuto la siguiente rutina, porque
> con
> > una
> > > > > > >
> > > > > > > matriz
> > > > > > >
> > > > > > > muy grande el tiempo de ejecución se va a bastantes horas.
> > > > > > >
> > > > > > > Cualquier idea para mejorarlo y reducir significativamente el
> > tiempo,
> > > > > > >
> > > > > > > estaría muy agradecido
> > > > > > >
> > > > > > > Muchas gracias por vuestra ayuda
> > > > > > >
> > > > > > >
> >
> #_____________________________________________________________________________________
> > > > > > >
> > > > > > > f5 <- function(x){data1 %>% filter(Clus.Multi.OPTIMO %in%
> > > > > > >
> > > > > > > c(EMISOR,RECEPTOR[x])) %>%
> > > > > > >
> > > > > > > dplyr::select(1:numvar+1) %>% data.matrix() %>% CohenD()}
> > > > > > >
> > > > > > > fila = 1
> > > > > > >
> > > > > > > rr = nrow(data2)
> > > > > > >
> > > > > > > repeat{
> > > > > > >
> > > > > > > smc <-
> > > > > > >
> > > > > > >
> >
> sum(data2[fila,((2+fila):(nrow(data2)+2))]==max(data2[fila,((2+fila):(nrow(data2)+2))]))
> > > > > > >
> > > > > > > EMISOR <- data2[fila,1]$Var
> > > > > > >
> > > > > > > RECEPTOR <-
> > > > > > >
> > > > > > >
> >
> data2[which(as.vector(t(data2[fila,])[,1])==max(data2[fila,((2+fila):(nrow(data2)+2))]))-2,1]$Var
> > > > > > >
> > > > > > >     Rmax <- RECEPTOR[mclapply((1:smc),f5) %>% unlist() %>%
> > which.max()]
> > > > > > >
> > > > > > >     data1$Clus.Multi.OPTIMO[which(data1$Clus.Multi.MAX ==
> > > > > > >
> > > > > > >
> > > > > > > data2[fila,1]$Var)] <- Rmax
> > > > > > >
> > > > > > > fila = fila + 1
> > > > > > >
> > > > > > > if (fila == rr) {break}
> > > > > > >
> > > > > > > }
> > > > > > >
> > > > > > > <
> > > > > > >
> > > > > > >
> >
> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
> > > > > > >
> > > > > > > Libre
> > > > > > >
> > > > > > > de virus. www.avast.com
> > > > > > >
> > > > > > > <
> > > > > > >
> > > > > > >
> >
> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
> > > > > > >
> > > > > > > <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> > > > > > >
> > > > > > >         [[alternative HTML version deleted]]
> > > > > > >
> > > > > > >
> > > > > > > R-help-es mailing list
> > > > > > >
> > > > > > > R-help-es@r-project.org
> > > > > > >
> > > > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > > > > >
> > > > > > --
> > > > > >
> > > > > > Saludos,
> > > > > >
> > > > > > Carlos Ortega
> > > > > >
> > > > > > www.qualityexcellence.es
> > > >
> > > > R-help-es mailing list
> > > >
> > > > R-help-es@r-project.org
> > > >
> > > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> > >
> > > [[alternative HTML version deleted]]
> > >
> > > R-help-es mailing list
> > >
> > > R-help-es@r-project.org
> > >
> > > https://stat.ethz.ch/mailman/listinfo/r-help-es
> >
>
> <
> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
> >
> Libre
> de virus. www.avast.com
> <
> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail
> >
> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>


-- 
Saludos,
Carlos Ortega
www.qualityexcellence.es

        [[alternative HTML version deleted]]

_______________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

Responder a