Привет и добро пожаловать в StackOverflow.
Причина, по которой ваш предыдущий код работал, заключается в том, что он содержал только 1 пик.
Вам необходимо объединить предыдущее значение и текущее значение, если вы используете для этой цели for
-loops,Так и в вашем случае, когда вы присваиваете значения Peaks
и indPeaks
.Таким образом, код будет:
r <- c(1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 7, 5, 2, 4, 8, 11, 12, 9)
Peaks <- c()
indPeaks <- c()
n <- length(r)-1
for (x in 1:n) {
if ((x-1)<1){
if(r[x+1]<r[x]) {
Peaks <-c(Peaks,r[x])
indPeaks <- c(indPeaks,x)
}
}
else{
if(r[x-1]<r[x]&r[x+1]<r[x]) {
Peaks <- c(Peaks,r[x])
indPeaks <- c(indPeaks, x)
}
}
}
с выводом:
> Peaks
[1] 5 7 12
> indPeaks
[1] 5 11 17
Обратите внимание, что я изменил последнюю часть вашего indPeaks <- c(indPeaks, x)
.Где предыдущая версия была неправильной, так как у вас было несколько значений в r
, идентичных r[x]
.Примечание: я не пытался оптимизировать ваш код, я только что исправил, чтобы вы получили ожидаемый результат.:)