[R-br] Evolução de elementos em grupos

Roney Fraga Souza roneyfraga em gmail.com
Terça Junho 10 14:20:30 BRT 2014


É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





Mais detalhes sobre a lista de discussão R-br