[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 13:17:24 CEST 2021


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]]



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