[R-es] problema de tiempo de ejecución con una rutina dentro de un programa de R

Carlos Santos c@r|o@@@nto@@c@m @end|ng |rom gm@||@com
Mie Sep 22 15:31:35 CEST 2021


Gracias Carlos,

Si, quizas no lo explique bien, lo fundamental y es donde se tarda mucho
tiempod e cpu, es el bucle FOR, que tiene que recorrer una matriz desde 1
hasta totcluy, entendiendo que la variable totclu puede ser por ejemplo
10.000, lo que quiere decir que por cada fila tiene que realizar el calculo
que he puesto en el FOR que tampoco es demasiado pero logicamente tiene que
recorrer por ejemplo en este caso 10.000 columnas
A su vez el while tiene que hacerlo otras 10000 veces menos 3, lo que
significa que el tiempo empleado hasta completar cada fila de la matriz es
enorme

no se si he podido explicarlo mejor, es por eso que entiendo que el bucle
FOR es muy costoso, y aunque he puesto un while bien podia ser un FOR
dentro de otro FOR, en donde el primero controla las filas y el segundo las
columnas, pero no se como hacer que el tiempo de cpu sea lo menor posible

El mié, 22 sept 2021 a las 14:56, Carlos Ortega (<cof using qualityexcellence.es>)
escribió:

> Hola,
>
> ¿Por qué no nos dices mejor el problema qué quieres resolver con tus
> datos/matriz/matrices inicial?
> Seguramente podamos ver una forma alternativa a utilizar un bucle...
>
> En cualquier caso, por si quieres ir viendo como correr ese bucle en
> paralelo..:
>
>    -
>    https://stackoverflow.com/questions/53054366/how-can-i-run-a-for-loop-in-parallel-in-r
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
> El mié, 22 sept 2021 a las 13:18, Carlos Santos (<
> carlossantos.csm using gmail.com>) escribió:
>
>> Hola a todos, familia de R
>>
>> Tengo un pequeño problema de tiempo de ejecución con una rutina, a ver si
>> me pueden echar una mano y ayudarme si es posible, claro.
>>
>> La rutina es la siguiente:
>>
>> while(totclu != 3){
>>   matrizF <- matrix(0, nrow = 1, ncol = totclu)
>>   for (j in 1:totclu) {
>>     q1 <- c(which(data1$Clus.Multi.FAIRNESS == k2A$Var1[1]),
>>             which(data1$Clus.Multi.FAIRNESS == k2A$Var1[j]))
>>     q2 <- nrow(as.data.frame(c(which(data1$Clus.Multi.FAIRNESS ==
>> k2A$Var1[1]),
>>                                which(data1$Clus.Multi.FAIRNESS ==
>> k2A$Var1[j]))))
>>     observado <- table(data1$VarFC[q1])/q2
>>     matrizF[i] <- dist(rbind(observado,propuesto),method = "euclidean")
>>   }
>>   matrizF[1] <- 99
>>   min_observado <- which.min(matrizF)
>>   q4 <- which(data1$Clus.Multi.FAIRNESS == k2A$Var1[1])
>>   data1$Clus.Multi.FAIRNESS[q4] <-  as.character(k2A$Var1[min_observado])
>>   k2A$Freq[min_observado] <- k2A$Freq[min_observado] + k2A$Freq[1]
>>   k2A <- as.data.frame(table(as.character(data1$Clus.Multi.FAIRNESS))) %>%
>> arrange(Freq)
>>   totclu=nrow(k2A)
>> }
>>
>> El problema fundamental es que la matriz que aparece como k2A es una
>> matriz
>> (nxn) lo que significa que puede ser muy grande, por ejemplo 1000x1000, y
>> el tiempo que tarda es enorme y no veo como disminuir el tiempo de
>> ejecución del "for" que pienso que es lo mas duro.
>>
>> No se si se puede poner como procesamiento en paralelo en r, pero tampoco
>> ser como ponerlo
>>
>> Si me pueden echar una mano, les estaré muy agradecido
>>
>> muchas gracias de antemano
>>
>> Carlos Santos
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es