<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.23515">
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT color=#0000ff><STRONG><FONT size=4><FONT face=Arial>Envie o arquivo 
que usou para gerar estes dados.</FONT><BR></FONT></STRONG></FONT></DIV>
<BLOCKQUOTE 
style="BORDER-LEFT: #000000 2px solid; PADDING-LEFT: 5px; PADDING-RIGHT: 0px; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px">
  <DIV dir=ltr>Senhores, <BR>
  <DIV>recorro a lista para buscar ajuda referente a uma questão de tempo de 
  processamento no R.</DIV>
  <DIV>Escrevi um código para realizar, basicamente, operação de contagem dentro 
  de subvetores de um vetor maior. O problema é que a performance vai caindo 
  conforme a tarefa é executada.</DIV>
  <DIV><BR></DIV>
  <DIV>Tenho o vetor principal de dados: <B>vetor</B></DIV>
  <DIV>Crio o vetor de diferenças vetor[i] - vetor[(i-1)]: <B>d</B></DIV>
  <DIV><BR></DIV>
  <DIV>A tarefa é simples e consiste em avaliar, a partir da i-ésima posição do 
  vetor principal, o subvetor que vai de (i+1) até (i+k), calculando a proporção 
  de valores que são maiores que o valor anterior dentro desse subvetor. Faço a 
  tarefa avaliando um subvetor de cada vez, reciclando o mesmo objeto chamado 
  subVetorD.</DIV>
  <DIV>O ponto é que a cada subvetor avaliado o processamento vai ficando mais 
  lento e para vetores muito longos a performance fica muito prejudicada.</DIV>
  <DIV>A questão é: porque perde performance e o que posso fazer a 
  respeito?</DIV>
  <DIV><BR></DIV>
  <DIV>Abaixo envio um CMR, que não o é de fato, porque o vetor principal contém 
  apenas alguns registros, a caráter ilustrativo.</DIV>
  <DIV>##########</DIV>
  <DIV>length(vetor)<BR></DIV>
  <DIV>
  <DIV>#[1] 1499855</DIV>
  <DIV>head(vetor)<BR>#[1] 39.2738 39.5016 39.5299 39.4839 39.4614 
  39.6217<BR>summary(vetor)<BR>#   Min. 1st Qu.  Median   
   Mean 3rd Qu.    Max. <BR>#  14.25   31.95   
  50.02   46.21   57.73   89.87 </DIV>
  <DIV><SPAN 
  style="LINE-HEIGHT: 16px; BACKGROUND-COLOR: rgb(225,226,229); BORDER-SPACING: 0px; BORDER-COLLAPSE: separate; FONT-FAMILY: 'Ubuntu Mono'; WHITE-SPACE: pre-wrap; COLOR: rgb(0,0,0); FONT-SIZE: 14px"><PRE style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; LINE-HEIGHT: 1.2; MARGIN-TOP: 0px; OUTLINE-STYLE: none; OUTLINE-COLOR: invert; OUTLINE-WIDTH: medium; FONT-FAMILY: 'Ubuntu Mono'; WHITE-SPACE: pre-wrap !important; MARGIN-BOTTOM: 0px; FONT-SIZE: 10.4pt !important; BORDER-TOP: medium none; BORDER-RIGHT: medium none" tabIndex=0><BR></PRE></SPAN></DIV>
  <DIV>#diferenças</DIV>
  <DIV>d<-diff(vetor, lag=1)</DIV>
  <DIV><BR></DIV>
  <DIV>k<-140</DIV>
  <DIV>pctMaiorDepois<-NA</DIV>
  <DIV>marcacoes<-NA</DIV>
  <DIV>progress<-seq(2,(length(vetor)-k), by=10000)</DIV>
  <DIV>tam<-(length(vetor)-k)</DIV>
  <DIV>t1<-Sys.time()</DIV>
  <DIV>for (i in 2:tam){</DIV>
  <DIV>  if (d[i-1] > 0) {</DIV>
  <DIV>    subVetorD<-d[(i+1):(i+k)]</DIV>
  <DIV>    pctMaiorDepois[i]<-sum(subVetorD>0)/k</DIV>
  <DIV>  }</DIV>
  <DIV>  if (any(i==progress)) {</DIV>
  <DIV>    t2<-Sys.time()</DIV>
  <DIV>    print(paste(round(i/tam,2), 
  round(difftime(t2,t1,units="secs"),2)))</DIV>
  <DIV>    t1<-t2</DIV>
  <DIV>  }</DIV>
  <DIV>}</DIV></DIV>
  <DIV><BR></DIV>
  <DIV>A seguir está o resultado do print() acima, que parei em 70% do 
  processamento completo, para mostrar como o tempo (em segundos) vai 
  aumentando.<BR></DIV>
  <DIV>% processamento ; tempos em segundos </DIV>
  <DIV>
  <DIV>[1] "0 0.77"</DIV>
  <DIV>[1] "0.01 0.24"</DIV>
  <DIV>[1] "0.01 0.33"</DIV>
  <DIV>[1] "0.02 0.42"</DIV>
  <DIV>[1] "0.03 0.53"</DIV>
  <DIV>[1] "0.03 0.64"</DIV>
  <DIV>[1] "0.04 0.73"</DIV>
  <DIV>[1] "0.05 0.86"</DIV>
  <DIV>[1] "0.05 0.94"</DIV>
  <DIV>[1] "0.06 1.04"</DIV>
  <DIV>[1] "0.07 1.21"</DIV>
  <DIV>[1] "0.07 1.27"</DIV>
  <DIV>[1] "0.08 1.38"</DIV>
  <DIV>[1] "0.09 1.49"</DIV>
  <DIV>[1] "0.09 1.61"</DIV>
  <DIV>[1] "0.1 1.79"</DIV>
  <DIV>[1] "0.11 1.92"</DIV>
  <DIV>[1] "0.11 2.16"</DIV>
  <DIV>[1] "0.12 2.5"</DIV>
  <DIV>[1] "0.13 3.1"</DIV>
  <DIV>[1] "0.13 3.14"</DIV>
  <DIV>[1] "0.14 3.42"</DIV>
  <DIV>[1] "0.15 3.53"</DIV>
  <DIV>[1] "0.15 3.74"</DIV>
  <DIV>[1] "0.16 3.88"</DIV>
  <DIV>[1] "0.17 3.99"</DIV>
  <DIV>[1] "0.17 4.23"</DIV>
  <DIV>[1] "0.18 4.45"</DIV>
  <DIV>[1] "0.19 4.66"</DIV>
  <DIV>[1] "0.19 4.96"</DIV>
  <DIV>[1] "0.2 5.03"</DIV>
  <DIV>[1] "0.21 5.06"</DIV>
  <DIV>[1] "0.21 5.63"</DIV>
  <DIV>[1] "0.22 6.23"</DIV>
  <DIV>[1] "0.23 6.4"</DIV>
  <DIV>[1] "0.23 6.2"</DIV>
  <DIV>[1] "0.24 6.71"</DIV>
  <DIV>[1] "0.25 6.76"</DIV>
  <DIV>[1] "0.25 6.54"</DIV>
  <DIV>[1] "0.26 6.5"</DIV>
  <DIV>[1] "0.27 6.72"</DIV>
  <DIV>[1] "0.27 6.67"</DIV>
  <DIV>[1] "0.28 6.87"</DIV>
  <DIV>[1] "0.29 7.04"</DIV>
  <DIV>[1] "0.29 7.51"</DIV>
  <DIV>[1] "0.3 7.69"</DIV>
  <DIV>[1] "0.31 7.62"</DIV>
  <DIV>[1] "0.31 7.54"</DIV>
  <DIV>[1] "0.32 7.82"</DIV>
  <DIV>[1] "0.33 8.16"</DIV>
  <DIV>[1] "0.33 8.43"</DIV>
  <DIV>[1] "0.34 8.99"</DIV>
  <DIV>[1] "0.35 8.55"</DIV>
  <DIV>[1] "0.35 8.98"</DIV>
  <DIV>[1] "0.36 8.99"</DIV>
  <DIV>[1] "0.37 9.53"</DIV>
  <DIV>[1] "0.37 10.09"</DIV>
  <DIV>[1] "0.38 9.88"</DIV>
  <DIV>[1] "0.39 9.78"</DIV>
  <DIV>[1] "0.39 10.01"</DIV>
  <DIV>[1] "0.4 9.66"</DIV>
  <DIV>[1] "0.41 9.8"</DIV>
  <DIV>[1] "0.41 10.14"</DIV>
  <DIV>[1] "0.42 10.04"</DIV>
  <DIV>[1] "0.43 10.81"</DIV>
  <DIV>[1] "0.43 10.94"</DIV>
  <DIV>[1] "0.44 11.05"</DIV>
  <DIV>[1] "0.45 11.64"</DIV>
  <DIV>[1] "0.45 11.73"</DIV>
  <DIV>[1] "0.46 11.7"</DIV>
  <DIV>[1] "0.47 11.65"</DIV>
  <DIV>[1] "0.47 11.63"</DIV>
  <DIV>[1] "0.48 11.68"</DIV>
  <DIV>[1] "0.49 12.08"</DIV>
  <DIV>[1] "0.49 12.34"</DIV>
  <DIV>[1] "0.5 13.35"</DIV>
  <DIV>[1] "0.51 13.66"</DIV>
  <DIV>[1] "0.51 13.84"</DIV>
  <DIV>[1] "0.52 13.87"</DIV>
  <DIV>[1] "0.53 14.94"</DIV>
  <DIV>[1] "0.53 14.42"</DIV>
  <DIV>[1] "0.54 14.71"</DIV>
  <DIV>[1] "0.55 14.51"</DIV>
  <DIV>[1] "0.55 13.72"</DIV>
  <DIV>[1] "0.56 14.7"</DIV>
  <DIV>[1] "0.57 14.75"</DIV>
  <DIV>[1] "0.57 13.83"</DIV>
  <DIV>[1] "0.58 14.34"</DIV>
  <DIV>[1] "0.59 15.11"</DIV>
  <DIV>[1] "0.59 15.09"</DIV>
  <DIV>[1] "0.6 15.12"</DIV>
  <DIV>[1] "0.61 16.49"</DIV>
  <DIV>[1] "0.61 18.3"</DIV>
  <DIV>[1] "0.62 17.77"</DIV>
  <DIV>[1] "0.63 16.87"</DIV>
  <DIV>[1] "0.63 16.17"</DIV>
  <DIV>[1] "0.64 17.09"</DIV>
  <DIV>[1] "0.65 17.04"</DIV>
  <DIV>[1] "0.65 16.38"</DIV>
  <DIV>[1] "0.66 15.84"</DIV>
  <DIV>[1] "0.67 16.39"</DIV>
  <DIV>[1] "0.67 16.6"</DIV>
  <DIV>[1] "0.68 17.32"</DIV>
  <DIV>[1] "0.69 17.05"</DIV>
  <DIV>[1] "0.69 17.87"</DIV>
  <DIV>[1] "0.7 18.27"</DIV></DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV>
  <DIV>Abraços,</DIV>
  <DIV>Paulo Nogueira Starzynski</DIV>
  <DIV><BR></DIV>
  <DIV><BR></DIV></DIV>
  <P>
  <P><FONT size=2 face=Arial></FONT></P></BLOCKQUOTE></BODY></HTML>