нарезка вектора показывает ошибку нашего диапазона

У меня есть эта часть моего кода зазубрин. Я действительно не вижу, где код выходит за пределы диапазона. Может ли кто-нибудь увидеть какую-либо ошибку, которую я не могу распознать? Это размеры данных.

N = 96

L = c(4,4,4,4,4)

length(media1) = 96

length(weights1) = 4

      for(t in 1:N){
        current_window_x <- ifelse(t <= L[1], media1[1:t], media1[(t - L[1] + 1):t])
        t_in_window <- length(current_window_x)
        new_media1[t] <- ifelse(t <= L[1], inprod(current_window_x, weights1[1:t_in_window]), 
        inprod(current_window_x, weights1))
      }

Ошибка (где строка 41 соответствует первой строке в цикле)

      Error in jags.model(model.file, data = data, inits = init.values, n.chains = n.chains,  : 
      RUNTIME ERROR:
      Compilation error on line 41.
      Index out of range taking subset of  media1

person Abdelouahed BEN MHAMED    schedule 03.03.2021    source источник


Ответы (1)


На самом деле я только что наткнулся на ответ здесь ранее сегодня по поводу того, над чем я работал. Ответ находится в этом сообщении. Суть в том, что ifelse() в jags не является оператором потока управления, это функция, и оцениваются как условия TRUE, так и FALSE. Таким образом, даже если вы говорите использовать media1[1:t], если t<=L[1], условие FALSE также оценивается, что приводит к ошибке.

Другая проблема, как только вы сможете это исправить, заключается в том, что вы повторно определяете параметр current_window_x, что приведет к ошибке. Я думаю, что самый простой способ справиться с переменной шириной окна - это просто жестко закодировать первые несколько наблюдений new_media, а затем вычислить оставшиеся в цикле, например:

new_media[1] <- media1[1]*weights1[1]
new_media[2] <- inprod(media1[1:2], weights1[1:2])
new_media[3] <- inprod(media1[1:3], weights1[1:3])
for(t in 4:N){
  new_media[t] <- inprod(media1[(t - L[1] + 1):t], weights1)
}

person DaveArmstrong    schedule 03.03.2021
comment
Спасибо, @DaveArmstrong. Именно это я и сделал. Просто жестко запрограммированы первые элементы. - person Abdelouahed BEN MHAMED; 04.03.2021