আমি whuber এর প্রতিক্রিয়ার সাথে একমত কিন্তু কেবল কোডটির "+2" অংশটি যুক্ত করতে চেয়েছিলাম, যা সদ্য পাওয়া চূড়ান্তটিকে আসলে 'ওভারশুট'-এর সাথে মেলে সূচিটি পরিবর্তনের চেষ্টা করে এবং "+1" হওয়া উচিত। উদাহরণস্বরূপ আমরা হাতে পাওয়া উদাহরণটিতে:
> findPeaks(cc)
[1] 3 22 41 59 78 96
যখন আমরা কোনও গ্রাফে এই পাওয়া পর্বতগুলি হাইলাইট করি (গা bold় লাল):
আমরা দেখতে পাচ্ছি যে তারা ক্রমাগত প্রকৃত শীর্ষ থেকে 1 পয়েন্ট দূরে।
consequenty
pks[x[pks - 1] - x[pks] > thresh]
হতে হবে pks[x[pks] - x[pks + 1] > thresh]
বাpks[x[pks] - x[pks - 1] > thresh]
বড় আপডেট
পর্যাপ্ত শীর্ষস্থানীয় অনুসন্ধানের ফাংশন সন্ধান করার জন্য আমার নিজের অনুসন্ধান অনুসরণ করে আমি এটি লিখেছি:
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
}
একটি 'শিখর' স্থানীয় ম্যাক্সিমা হিসাবে সংজ্ঞায়িত করা m
হয় যার উভয় পাশই এর চেয়ে ছোট হয় points অতএব, প্যারামিটারটি যত বড় হবে m
তত তাত্ক্ষণিক পিক্স ফান্ডিং পদ্ধতি। তাই:
find_peaks(cc, m = 1)
[1] 2 21 40 58 77 95
ফাংশনটি কোনও অনুক্রমিক ভেক্টরের x
মাধ্যমে স্থানীয় মিনিমা সন্ধান করতেও ব্যবহৃত হতে পারেfind_peaks(-x)
।
দ্রষ্টব্য: কারও যদি এটির প্রয়োজন হয় তবে আমি এখন গিটহাবটিতে ফাংশনটি রেখেছি: https://github.com/stas-g/findPeaks