No tengo suficiente reputación para comentar directamente sobre la respuesta de stas-g pero este es un comentario sobre un problema que encontré con el código de stas-g
Tengo vectores con datos incompletos
a = c(1.60676107, -1.84154137, -0.03814237, -3.01587711, 6.67004912, NA, NA, -0.94917515)
# Looking at the data find_peaks(a, m=3) should return 5
# and find_peaks(-a, m= 3) should return 4
find_peaks(a, m = 3)
# returns numeric(0) with the code as is
find_peaks(-a, m)
# returns an error
El error se debe a la evaluación de la condición todo
if(all(x[c(z : i, (i + 2) : w)] <= x[i + 1])) return(i + 1) else return(numeric(0))
En el primer caso el término a evaluar por all() devuelve FALSE antes de llegar a NA
y find_peaks(-a) falla porque all() devuelve NA y if(NA) falla.
Sin embargo añadiendo na.rm = T a all()
if(all(x[c(z : i, (i + 2) : w)] <= x[i + 1], na.rm = T)) return(i + 1) else return(numeric(0))
no resuelve el problema. find_peaks(-a,m=3) devuelve 4 pero find_peaks(a, m = 3) vuelve a devolver numeric(0) en lugar de 5
Al rellenar NA con el último valor válido antes de NA se añadirá un extremo local a los resultados y find_peaks(a, m= 3) devuelve 5 y 7
La función c++ de caseyk devuelve 4 y 5 como cabría esperar por observación visual