
É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