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