Whuber'ın yanıtıyla aynı fikirdeyim ama sadece yeni bulunan zirveye uyacak şekilde dizini değiştirmeye çalışan ve "+1" olması gereken kodun "+2" kısmını eklemek istedim. örneğin elimizdeki örnekte şunu elde ederiz:
> findPeaks(cc)
[1] 3 22 41 59 78 96
bir grafikte bulunan bu zirveleri vurguladığımızda (kalın kırmızı):

gerçek zirveden sürekli olarak 1 puan uzakta olduklarını görüyoruz.
consequenty
pks[x[pks - 1] - x[pks] > thresh]
olmalı pks[x[pks] - x[pks + 1] > thresh]ya dapks[x[pks] - x[pks - 1] > thresh]
BÜYÜK GÜNCELLEME
yeterli bir tepe bulma fonksiyonu bulmak için kendi arayışı aşağıdaki yazdı:
find_peaks <- function (x, m = 3){
shape <- diff(sign(diff(x, na.pad = FALSE)))
pks <- sapply(which(shape < 0), FUN = function(i){
z <- i - m + 1
z <- ifelse(z > 0, z, 1)
w <- i + m + 1
w <- ifelse(w < length(x), w, length(x))
if(all(x[c(z : i, (i + 2) : w)] <= x[i + 1])) return(i + 1) else return(numeric(0))
})
pks <- unlist(pks)
pks
}
'tepe', mher iki tarafının da ondan daha küçük olduğu noktalarla yerel bir maksimadır . dolayısıyla, parametre ne kadar büyük olursa m, en yüksek fonlama prosedürü o kadar katı olur. yani:
find_peaks(cc, m = 1)
[1] 2 21 40 58 77 95
fonksiyon aynı zamanda xüzerinden herhangi bir ardışık vektörün yerel minimasını bulmak için de kullanılabilir find_peaks(-x).
Not: Herkesin ihtiyacı varsa şimdi işlevi gitHub'a koydum: https://github.com/stas-g/findPeaks