Éder, utilizando a função intersect() o tempo de processamento reduziu pela 
metade. 

###
### início do código
###
load(‘ver2.RData”)

grupo <- list()

system.time({
for(k in 2:length(ver2)){       
        grp <- sort(unique((ver2[[k-1]]$grupo))) ### qtde de grupos no ano t-1 
        grp2 <- sort(unique((ver2[[k]]$grupo))) ### qtde de grupos no ano t
        RES <- LAB <- list()
        for (i in grp) {
                for (j in grp2) {
                        RES <- 
append(RES,list(length(intersect(ver2[[k-1]]$name[ver2[[k-1]]$grupo==i], 
ver2[[k]]$name[ver2[[k]]$grupo==j]))))
                        LAB <- append(LAB, paste(i,j, sep='-'))
        }}
        grupo[[k]] <- data.frame(label=sapply(LAB, "["), qtde=sapply(RES, sum))
        grupo[[k]] <- subset(grupo[[k]],qtde>0)
        #
        grupo[[k]]$t.grupo <- as.numeric(gsub('-.*','',grupo[[k]]$label))
        grupo[[k]]$t.ano <- min(ver2[[k]]$year)+k-2
        grupo[[k]]$tp1.grupo <- as.numeric(gsub('^.-','',grupo[[k]]$label))
        grupo[[k]]$tp1.ano <- min(ver2[[k]]$year)+k-1
}
})

grupo[[8]] # resultado para o ano de 1985

###
### fim
###


Quanto ao tempo total de processamento, em:
RES <- append(RES,list(length(intersect(ver2[[k-1]]$name[ver2[[k-1]]$grupo==i], 
ver2[[k]]$name[ver2[[k]]$grupo==j]))))
o tempo gasto é de aproximadamente 72% do total, enquanto em:
LAB <- append(LAB, paste(i,j, sep=‘-'))
o tempo gasto é de aproximadamente 22% do tempo total.

Penso então que para melhorar o código é necessário ter uma função que compare 
elementos entre grupos mais rápida que intersect(). Alguém conhece alguma?

Att
Roney



_______________________________________________
R-br mailing list
[email protected]
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código 
mínimo reproduzível.

Responder a