Есть несколько хороших решений, но это зависит от того, что вам нужно.
Просто diff(tt)
возвращает различия.
Вы хотите определить, когда вы переходите от увеличения значений к уменьшающимся значениям. Один из способов сделать это - @Ben:
diff(sign(diff(tt)))==-2
. Проблема заключается в том, что это только обнаружит изменения, которые идут немедленно от строго возрастающего до строгого уменьшения.
Небольшое изменение позволит повторить значения на пике (возврат TRUE
для последнего значения пикового значения):
diff(diff(x)>=0)<0
Затем вам просто нужно правильно нанести передний и задний, если вы хотите обнаружить максимумы в начале или конце
Вот все, что связано с функцией (включая поиск долин):
which.peaks <- function(x,partial=TRUE,decreasing=FALSE){
if (decreasing){
if (partial){
which(diff(c(FALSE,diff(x)>0,TRUE))>0)
}else {
which(diff(diff(x)>0)>0)+1
}
}else {
if (partial){
which(diff(c(TRUE,diff(x)>=0,FALSE))<0)
}else {
which(diff(diff(x)>=0)<0)+1
}
}
}