Математически говоря, ваша проблема очень плохо определена.Вы предоставляете диапазон дискретных значений, а не функцию для ваших значений y.Это означает, что его нельзя дифференцировать, чтобы найти локальные максимумы.
Тем не менее, здесь приведен фрагмент кода, который может помочь вам начать работу.Он использует функцию с именем peaks
, ( приписывается Брайану Рипли ):
peaks<-function(series,span=3){
z <- embed(series, span)
s <- span%/%2
v<- max.col(z) == 1 + s
result <- c(rep(FALSE,s),v)
result <- result[1:(length(result)-s)]
result
}
x <- c(1:20)
y <- c(19.4, 17.9, 8.1, 11.3, 7.8, 8.0, 5.0, 1.7, 3.9,
5.4, 7.5, 5.4, 4.7, 5.0, 4.9, 3.5, 2.9, 2.4, 1.4, 1.7)
plot(x,y, type="l")
p <- which(peaks(y, span=3))
lines(x[p], y[p], col="red", type="b)
Проблема в том, что концепция локальногопики плохо определены.Насколько локальный ты имеешь в виду?Алгоритм пиков в том виде, в котором он поставляется, позволяет изменять span
.Поиграйте и посмотрите, поможет ли это вообще.