<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:10pt"><div><span>Muito Bom!!! Impressionante a diferença (no tempo e no tamanho da função)!</span></div><div><span>Valeu</span></div><div><span><br></span></div><div><span>Gustavo</span></div><div><br></div> <div style="font-size: 10pt; font-family: 'times new roman', 'new york', times, serif; "> <div style="font-size: 12pt; font-family: 'times new roman', 'new york', times, serif; "> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1"> <b><span style="font-weight:bold;">De:</span></b> Benilton Carvalho <beniltoncarvalho@gmail.com><br> <b><span style="font-weight: bold;">Para:</span></b> r-br@listas.c3sl.ufpr.br; Gustavo Marcatti <vgp.gustavo@yahoo.com.br> <br> <b><span style="font-weight: bold;">Enviadas:</span></b> Quarta-feira, 18 de Abril de 2012 18:48<br> <b><span style="font-weight:
bold;">Assunto:</span></b> Re: [R-br] Ajuda para evitar um loop com elegância 2<br> </font> </div> <br>Veja o codigo abaixo e encontre o que fazer nos 475 segundos que devem<br>sobrar... b<br><br>set.seed(1)<br>n <- 1e3<br>vetor1 <- rep(1:n, each = 5)<br>var1 <- abs(rnorm(n,3)) * vetor1<br>cond1 <- abs(rnorm(n,10)) * vetor1<br><br>fOriginal <- function(vetor1, var1, cond1){<br> var2 <- matrix(0, nrow=length(vetor1))<br> cond2 <- matrix(0, nrow=length(vetor1))<br> for(i in 1:(length(vetor1) - 1)){<br> if(vetor1[i] == vetor1[i+1]){<br> var2[i] = var1[i+1]<br> cond2[i] = cond1[i+1]<br><br> }else {<br> var2[i] = NA<br> cond2[i] = NA<br> }<br><br>
}<br> var2[length(vetor1)] <- NA<br> cond2[length(vetor1)] <- NA<br> na.exclude(data.frame(var2, cond2))<br>}<br><br>fOtimizada <- function(vetor1, var1, cond1){<br> data.frame(var1[-1], cond1[-1])[diff(vetor1)==0,]<br>}<br><br><br>library(rbenchmark)<br>(res <- benchmark(original=fOriginal(vetor1, var1, cond1),<br> oneliner=fOtimizada(vetor1, var1, cond1),<br> columns=c('test', 'elapsed', 'relative')))<br><br><br> </div> </div> </div></body></html>