[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