<div dir="ltr"><div><div class="gmail_signature"><div dir="ltr">Boa tarde, estou com o seguinte caso:</div><div dir="ltr"><br></div><div>DADO:</div><div dir="ltr">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)</div><div dir="ltr">wavelength = seq(400, 450, by=1)<br></div><div dir="ltr"><div dir="ltr">plot(wavelenght, amostra, xlab  = "Comp. Onda (nm)", ylab = 'Valor', type = "l")</div><div dir="ltr">axis(side=1, at=seq(400, 450, by=5))</div><div><br></div><div>PROBLEMA:</div><div>Estou tentando ler os valores mínimos e máximos de cada pico para ter o valor da amplitude.</div><div>Consigo fazer isso delimitando o intervalo de comp. de ondas da posição do pico, mas é muito laborioso</div><div>EX: max(amostra[,1:20]) e min(amostraamostra[,1:20]). Amplitude seria a diferença deles.</div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>Tentei o código abaixo, mas me retorna o erro que o argumento é de comprimento zero! </div><div><br></div><div><div>for(i in 1:length(amostra)){</div><div>      if((amostra[i+1] > amostra[i])&(amostra[i-1]>amostra[i]))</div><div>       print(amostra[i])</div><div>      }</div></div><div><br></div><div>(Error in if ((amostra[i + 1] > amostra[i]) & (amostra[i - 1] > amostra[i])) print(amostra[i]) : argument is of length zero)</div><div><br></div><div>Um resultado que observei foi de do seguinte código, somente com uma condição colocada nele:</div><div><br></div><div><div>for(i in 1:length(amostra)){</div><div>      if(amostra[i+1] > amostra[i])</div><div>       print(amostra[i])</div><div>  }</div></div><div><br></div><div>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. </div><div><br></div><div>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.</div><div><br></div><div>Grato pela atenção! José Lucas.</div></div></div></div>
</div>