Новое: Определение локальных максимумов с использованием операторов For & If в R - PullRequest
0 голосов
/ 03 октября 2018

Спасибо тем, кто помог в моем последнем вопросе, я внес некоторые изменения, и код сработал.Однако, когда я увеличиваю длину r, максимальные значения не сохраняются правильно.Кто-нибудь может определить, почему?

Извините, я нуб.

Код:

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 <-r[x]
      indPeaks <- which(r == r[x])
    }
  }
  else{
    if(r[x-1]<r[x]&r[x+1]<r[x]) {
      Peaks <-r[x]
      indPeaks <- which(r == r[x])
    }
  }
}

Возвращает (Среда):

indPeaks 
17      # should be: 5 11 17

Peaks 
12 #should be: 5 7 12

Код работал для

r <- c(1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 7)

1 Ответ

0 голосов
/ 03 октября 2018

Привет и добро пожаловать в 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].Примечание: я не пытался оптимизировать ваш код, я только что исправил, чтобы вы получили ожидаемый результат.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...