[R-br] Digest R-br, volume 60, assunto 14

José Lucas Safanelli zecojls em gmail.com
Domingo Dezembro 20 18:59:37 BRST 2015


Pessoal, consegui resolver aqui com uma pesquisa mais aprofundada. Segue o
código de leitura dos picos e vales para a amostra utilizada:

maximo = data.frame()
for(i in 1:length(amostra)){
      if( max(amostra[i+1], amostra[i-1]) < amostra[i])
      maximo = rbind(maximo, data.frame(print(amostra[i])))
  }

#LEITURA DOS MINIMOS
minimo = data.frame()
for(i in 1:length(amostra)){
      if( min(amostra[i+1], amostra[i-1]) > amostra[i])
      minimo = rbind(minimo, data.frame(print(amostra[i])))
  }

Atenciosamente, José Lucas.

Message: 1
> Date: Sat, 19 Dec 2015 19:04:52 -0200
> From: José Lucas Safanelli <zecojls em gmail.com>
> To: r-br em listas.c3sl.ufpr.br
> Subject: [R-br] Loop para leitura de picos
> Message-ID:
>         <
> CADni8G5B-N9M4LqpZTVkAOgoSkTO56aK0icdg-PjVf0Us8PcFQ em mail.gmail.com>
> Content-Type: text/plain; charset="utf-8"
>
> Boa tarde, estou com o seguinte caso:
>
> DADO:
> amostra = c(49.936157, 48.133488, 45.775238, 43.229397, 40.021607,
> 35.927558, 31.365912, 26.849848, 23.233177, 20.770278, 18.572067,
> 15.590341, 11.936978, 8.478520, 5.572115, 3.272254, 1.642041, 0.999997,
> 1.473886, 2.616919, 4.169691, 6.464019, 9.790810, 13.820101, 17.978423,
> 21.674281, 24.065947, 24.875069, 24.590811, 23.620608, 22.240339,
> 20.676521, 19.088229, 17.689105, 16.720912, 16.358739, 16.792281,
> 18.321545, 21.053896, 24.777756, 29.121638, 33.551339, 37.628649,
> 41.272700, 44.405581, 46.899820, 48.602420, 49.253714, 48.816692,
> 47.380737, 44.920718)
> wavelength = seq(400, 450, by=1)
> plot(wavelenght, amostra, xlab  = "Comp. Onda (nm)", ylab = 'Valor', type =
> "l")
> axis(side=1, at=seq(400, 450, by=5))
>
> PROBLEMA:
> Estou tentando ler os valores mínimos e máximos de cada pico para ter o
> valor da amplitude.
> Consigo fazer isso delimitando o intervalo de comp. de ondas da posição do
> pico, mas é muito laborioso
> EX: max(amostra[,1:20]) e min(amostraamostra[,1:20]). Amplitude seria a
> diferença deles.
>
> Para várias amostras tenho utilizado a função apply para dentro da linha,
> PORÉM decorrente da heterogeneidade das amostras, as posições variam
> causando erro de leitura e modelagem.
>
> Outro fato é que existem inúmeros picos dentro de uma faixa de interesse, e
> delimitando visualmente torna-se inviável. Para isso, estou tentando criar
> uma rotina que leia todos os picos dentro da faixa de interesse, para que
> possa utiliza-los diferentemente nas modelagens.
>
> Tentei o código abaixo, mas me retorna o erro que o argumento é de
> comprimento zero!
>
> for(i in 1:length(amostra)){
>       if((amostra[i+1] > amostra[i])&(amostra[i-1]>amostra[i]))
>        print(amostra[i])
>       }
>
> (Error in if ((amostra[i + 1] > amostra[i]) & (amostra[i - 1] >
> amostra[i])) print(amostra[i]) : argument is of length zero)
>
> Um resultado que observei foi de do seguinte código, somente com uma
> condição colocada nele:
>
> for(i in 1:length(amostra)){
>       if(amostra[i+1] > amostra[i])
>        print(amostra[i])
>   }
>
> Nesse código, consegue-se ler os valores crescentes dos picos,
> desconsiderando os valores do objeto quando os valores são decrescentes. A
> partir dele que tentei colocar duas condições depois do IF para que ele
> lê-se somente os valores mínimos, mas sem sucesso.
>
> Portanto, peço ajuda para confecção de um código que faça a leitura dos min
> e max, ou amplitude, de todos os picos da amostra, retornando em um
> objeto/dataframe para modelagem.
>
> Grato pela atenção! José Lucas.
> -------------- Próxima Parte ----------
> Um anexo em HTML foi limpo...
> URL: <
> http://listas.inf.ufpr.br/pipermail/r-br/attachments/20151219/add2cc3b/attachment-0001.html
> >
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20151220/4b8b8abf/attachment.html>


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