[R-es] Como puedo reducir el tiempo de ejecución en la siguiente rutina
Emilio L. Cano
em||opezc@no @end|ng |rom gm@||@com
Lun Dic 14 08:08:49 CET 2020
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.csm using 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> <x-msg://2/#m_-198326376745946536_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
> El dom, 13 dic 2020 a las 12:49, Carlos Ortega (<cof using qualityexcellence.es <mailto:cof using 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 <http://www.qualityexcellence.es/>
>
> El dom, 13 dic 2020 a las 12:33, Carlos Santos (<carlossantos.csm using gmail.com <mailto:carlossantos.csm using 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 <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 <http://www.avast.com/>
> <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail <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 using r-project.org <mailto:R-help-es using r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-help-es <https://stat.ethz.ch/mailman/listinfo/r-help-es>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es <http://www.qualityexcellence.es/>_______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es