Roney, Não sei teu conhecimento de programação(não uso R, mas sou programador) o que tu está fazendo é 3 loop, onde, me parece, que tu percorre toda a matriz todas as vezes, uma forma de otimizar o que tu está fazendo é não fazer aquele sort ali, tu pode organizar os dados forra do loop, porque aquilo diminui muito a performance. Não consegui ver o código, mas quem sabe tu posta ele aqui http://pastebin.com/ assim como código fica melhor de analisar. Me parece que tu esta usando esse código apenas para organizar os dados, se for isso, existe linguagens para eficientes para fazer isso(python é um exemplo) e ai tu usa o R só para fazer as análises estatísticas. Caso tu não conheça python e queira manter o R existem implementações com melhor performance como o pqR(http://www.pqr-project.org/) ou o fastr ( https://github.com/allr/fastr)
Sei que não te ajudei muito, mas espero ter te dado um norte :D Daniel Lemes Em 15 de março de 2015 16:25, Roney Fraga Souza <[email protected]> escreveu: > Olá pessoal, > > Eu tenho uma lista (ver2) composta por com 14 elementos, cada elemento é > um data.frame() contendo as mesmas variáveis, o que varia é apenas a > quantidade de linhas. Cada elemento da lista é um ano específico do > data.frame(), exemplo, ver2[[1]] é o ano de 1977, ver2[[2]] é 1978, > ver2[[3]] é 1979 até o último ano ver2[[14]] que é 1990. Nos data.frame() > tenho informações sobre artigos científicos: nome (código que não se > repete), grupo (extraído via processo de clusterização), PY (ano que o > artigo foi publicado) e one (variável apenas com valor 1 que uso em outros > procedimentos). Os data.frame() são cumulativos, no ano de 1978 estão todos > os artigos publicados até 1978, em 1979 estão todos os artigos publicados > até 1978 mais os artigos publicados em 1979, no em de 1990 estão todos os > artigos publicados até 1990. O procedimento de clusterização é realizado de > modo independente para cada ano, logo o artigo 'Baker, 1976, V4, P5' pode > estar em grupos diferentes para cada ano. > > Quero saber a origem dos artigos que estão em um determinado grupo. > Exemplo, grupo 1 de 1990, é composto por 100 artigos, desses 25 faziam > parte do grupo 1 em 1989, 30 do grupo 2 em 1989, 35 do grupo 3 em 1989, e > os 10 restantes eu não tenho interesse, pois, foram publicados no ano de > 1990 logo não existim nos anos anteriores. Segue exemplo do resultado que > eu obtenho o código atual: > > label qtde tm1.grupo tm1.ano t.grupo t.ano > 1-2 6 1 1989 2 1990 > 2-1 5 2 1989 1 1990 > 3-1 3 3 1989 1 1990 > 4-5 3 4 1989 5 1990 > 5-4 2 5 1989 4 1990 > 6-9 2 6 1989 9 1990 > 7-6 2 7 1989 6 1990 > 8-8 2 8 1989 8 1990 > 9-10 2 9 1989 10 1990 > > qtde = quantidade de artigos em cada grupo > tm1.grupo = ano t menos 1 determinado grupo > tm1.ano = ano t menos 1 > t.grupo = grupo > t.ano = ano > > Para chegar a tal resultado eu utilizo o seguinte código: > # ------------------------------ > # início do código > # ------------------------------ > > # baixar o arquivo 'ver2.rds' nesse link: > # https://db.tt/13dT9XQI > > ver2 <- readRDS("~/Downloads/ver2.rds") > > grupo <- list() > > 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]]$tm1.grupo <- as.numeric(gsub('-.*','',grupo[[k]]$label)) > grupo[[k]]$tm1.ano <- as.numeric(max(ver2[[k]]$PY)-1) > grupo[[k]]$t.grupo <- as.numeric(gsub('^.-','',grupo[[k]]$label)) > grupo[[k]]$t.ano <- as.numeric(max(ver2[[k]]$PY)) > } > # grupo > # ------------------------------ > # fim do código > # ------------------------------ > > Meu problema é: esse código funciona mas é muito lento, muito mesmo, > inviabilizando sua aplicação para o volume de dados que trabalho no dia a > dia. Alguém conhece uma forma mais rápida de fazer isso. > > Obs.: parte desse código foi contribuição de Eder Comunello através dessa > lista, mas naquela altura o problema estava estruturado de outra forma. > > Abraço > 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. > -- @lemes_daniel
_______________________________________________ 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.
