Я ищу воспроизводимый способ найти самый последний локальный пик в данной серии (и отдельно самый последний впадина). По большей части ответы здесь - Нахождение локальных максимумов и минимумов работают, за исключением случаев, как показано ниже, я использовал ответ Томми по этой ссылке, так как он кажется наиболее надежным.
x <- c(0.4,0.5,0.5,0.4,0.4,0.3,0.3)
localMaxima <- function(x) {
# Use -Inf instead if x is numeric (non-integer)
y <- diff(c(-Inf, x)) > 0L
rle(y)$lengths
y <- cumsum(rle(y)$lengths)
y <- y[seq.int(1L, length(y), 2L)]
if (x[[1]] == x[[2]]) {
y <- y[-1]
}
y
}
>localMaxima(x)
[1] 2
В этом случае следует возвращать [1] 3
, а не 2, поскольку это самая последняя точка (последняя точка данных является концом вектора). Обращение вектора с помощью rev (x) не будет работать, поскольку нет надежного способа определить, должен ли вектор быть обращенным.