[R-br] Questão de performance em processamento

Mauro Sznelwar sznelwar em uol.com.br
Domingo Setembro 1 19:31:52 BRT 2013


Envie o arquivo que usou para gerar estes dados.

  Senhores, 

  recorro a lista para buscar ajuda referente a uma questão de tempo de processamento no R.
  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.


  Tenho o vetor principal de dados: vetor
  Crio o vetor de diferenças vetor[i] - vetor[(i-1)]: d


  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.
  O ponto é que a cada subvetor avaliado o processamento vai ficando mais lento e para vetores muito longos a performance fica muito prejudicada.
  A questão é: porque perde performance e o que posso fazer a respeito?


  Abaixo envio um CMR, que não o é de fato, porque o vetor principal contém apenas alguns registros, a caráter ilustrativo.
  ##########
  length(vetor)

  #[1] 1499855
  head(vetor)
  #[1] 39.2738 39.5016 39.5299 39.4839 39.4614 39.6217
  summary(vetor)
  #   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  #  14.25   31.95   50.02   46.21   57.73   89.87 
  #diferenças
  d<-diff(vetor, lag=1)


  k<-140
  pctMaiorDepois<-NA
  marcacoes<-NA
  progress<-seq(2,(length(vetor)-k), by=10000)
  tam<-(length(vetor)-k)
  t1<-Sys.time()
  for (i in 2:tam){
    if (d[i-1] > 0) {
      subVetorD<-d[(i+1):(i+k)]
      pctMaiorDepois[i]<-sum(subVetorD>0)/k
    }
    if (any(i==progress)) {
      t2<-Sys.time()
      print(paste(round(i/tam,2), round(difftime(t2,t1,units="secs"),2)))
      t1<-t2
    }
  }


  A seguir está o resultado do print() acima, que parei em 70% do processamento completo, para mostrar como o tempo (em segundos) vai aumentando.

  % processamento ; tempos em segundos 
  [1] "0 0.77"
  [1] "0.01 0.24"
  [1] "0.01 0.33"
  [1] "0.02 0.42"
  [1] "0.03 0.53"
  [1] "0.03 0.64"
  [1] "0.04 0.73"
  [1] "0.05 0.86"
  [1] "0.05 0.94"
  [1] "0.06 1.04"
  [1] "0.07 1.21"
  [1] "0.07 1.27"
  [1] "0.08 1.38"
  [1] "0.09 1.49"
  [1] "0.09 1.61"
  [1] "0.1 1.79"
  [1] "0.11 1.92"
  [1] "0.11 2.16"
  [1] "0.12 2.5"
  [1] "0.13 3.1"
  [1] "0.13 3.14"
  [1] "0.14 3.42"
  [1] "0.15 3.53"
  [1] "0.15 3.74"
  [1] "0.16 3.88"
  [1] "0.17 3.99"
  [1] "0.17 4.23"
  [1] "0.18 4.45"
  [1] "0.19 4.66"
  [1] "0.19 4.96"
  [1] "0.2 5.03"
  [1] "0.21 5.06"
  [1] "0.21 5.63"
  [1] "0.22 6.23"
  [1] "0.23 6.4"
  [1] "0.23 6.2"
  [1] "0.24 6.71"
  [1] "0.25 6.76"
  [1] "0.25 6.54"
  [1] "0.26 6.5"
  [1] "0.27 6.72"
  [1] "0.27 6.67"
  [1] "0.28 6.87"
  [1] "0.29 7.04"
  [1] "0.29 7.51"
  [1] "0.3 7.69"
  [1] "0.31 7.62"
  [1] "0.31 7.54"
  [1] "0.32 7.82"
  [1] "0.33 8.16"
  [1] "0.33 8.43"
  [1] "0.34 8.99"
  [1] "0.35 8.55"
  [1] "0.35 8.98"
  [1] "0.36 8.99"
  [1] "0.37 9.53"
  [1] "0.37 10.09"
  [1] "0.38 9.88"
  [1] "0.39 9.78"
  [1] "0.39 10.01"
  [1] "0.4 9.66"
  [1] "0.41 9.8"
  [1] "0.41 10.14"
  [1] "0.42 10.04"
  [1] "0.43 10.81"
  [1] "0.43 10.94"
  [1] "0.44 11.05"
  [1] "0.45 11.64"
  [1] "0.45 11.73"
  [1] "0.46 11.7"
  [1] "0.47 11.65"
  [1] "0.47 11.63"
  [1] "0.48 11.68"
  [1] "0.49 12.08"
  [1] "0.49 12.34"
  [1] "0.5 13.35"
  [1] "0.51 13.66"
  [1] "0.51 13.84"
  [1] "0.52 13.87"
  [1] "0.53 14.94"
  [1] "0.53 14.42"
  [1] "0.54 14.71"
  [1] "0.55 14.51"
  [1] "0.55 13.72"
  [1] "0.56 14.7"
  [1] "0.57 14.75"
  [1] "0.57 13.83"
  [1] "0.58 14.34"
  [1] "0.59 15.11"
  [1] "0.59 15.09"
  [1] "0.6 15.12"
  [1] "0.61 16.49"
  [1] "0.61 18.3"
  [1] "0.62 17.77"
  [1] "0.63 16.87"
  [1] "0.63 16.17"
  [1] "0.64 17.09"
  [1] "0.65 17.04"
  [1] "0.65 16.38"
  [1] "0.66 15.84"
  [1] "0.67 16.39"
  [1] "0.67 16.6"
  [1] "0.68 17.32"
  [1] "0.69 17.05"
  [1] "0.69 17.87"
  [1] "0.7 18.27"




  Abraços,
  Paulo Nogueira Starzynski





-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130901/8a330f9c/attachment.html>


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