<div dir="ltr">Roney, <div><br></div><div>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.</div><div>Não consegui ver o código, mas quem sabe tu posta ele aqui <a href="http://pastebin.com/">http://pastebin.com/</a> assim como código fica melhor de analisar.</div><div>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.</div><div>Caso tu não conheça python e queira manter o R existem implementações com melhor performance como o pqR(<a href="http://www.pqr-project.org/">http://www.pqr-project.org/</a>) ou o fastr  (<a href="https://github.com/allr/fastr">https://github.com/allr/fastr</a>)</div><div><br></div><div>Sei que não te ajudei muito, mas espero ter te dado um norte :D</div><div><br></div><div>Daniel Lemes</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">Em 15 de março de 2015 16:25, Roney Fraga Souza <span dir="ltr"><<a href="mailto:roneyfraga@gmail.com" target="_blank">roneyfraga@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Olá pessoal, <br><br>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. <br><br>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:<br><br>label qtde tm1.grupo tm1.ano t.grupo t.ano<br>1-2    6         1    1989       2  1990<br>2-1    5         2    1989       1  1990<br>3-1    3         3    1989       1  1990<br>4-5    3         4    1989       5  1990<br>5-4    2         5    1989       4  1990<br>6-9    2         6    1989       9  1990<br>7-6    2         7    1989       6  1990<br>8-8    2         8    1989       8  1990<br>9-10   2         9    1989      10  1990<br><br>qtde = quantidade de artigos em cada grupo<br>tm1.grupo = ano t menos 1 determinado grupo<br>tm1.ano = ano t menos 1<br>t.grupo = grupo<br>t.ano = ano <br><br>Para chegar a tal resultado eu utilizo o seguinte código:<br># ------------------------------<br># início do código<br># ------------------------------<br><br># baixar o arquivo 'ver2.rds' nesse link:<br># <a href="https://db.tt/13dT9XQI" target="_blank">https://db.tt/13dT9XQI</a><br><br>ver2 <- readRDS("~/Downloads/ver2.rds")<br><br>grupo <- list()<br><br>for(k in 2:length(ver2)){<br>   grp <- sort(unique((ver2[[k-1]]$grupo))) ### qtde de grupos no ano t-1<br>   grp2 <- sort(unique((ver2[[k]]$grupo))) ### qtde de grupos no ano t<br>   RES <- LAB <- list()<br>   for (i in grp) {<br>       for (j in grp2) {<br>           RES <- append(RES,list(length(intersect(ver2[[k-1]]$name[ver2[[k-1]]$grupo==i], ver2[[k]]$name[ver2[[k]]$grupo==j]))))<br>           LAB <- append(LAB, paste(i,j, sep='-'))<br>       }<br>   }<br>   grupo[[k]] <- data.frame(label=sapply(LAB, "["), qtde=sapply(RES, sum))<br>   grupo[[k]] <- subset(grupo[[k]],qtde>0)<br>   grupo[[k]]$tm1.grupo <- as.numeric(gsub('-.*','',grupo[[k]]$label))<br>   grupo[[k]]$tm1.ano <- as.numeric(max(ver2[[k]]$PY)-1)<br>   grupo[[k]]$t.grupo <- as.numeric(gsub('^.-','',grupo[[k]]$label))<br>   grupo[[k]]$t.ano <- as.numeric(max(ver2[[k]]$PY))<br>}<br># grupo<br># ------------------------------<br># fim do código<br># ------------------------------<br><br>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.<br><br>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.<br><br>Abraço<span class="HOEnZb"><font color="#888888"><br>Roney</font></span></div><br>_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><br><br>@lemes_daniel</div>
</div>