切片向量显示错误超出范围

slicing a vector shows error our of range

我有这部分 jags 代码。我真的看不出代码在哪里超出了范围。谁能看到我无法识别的任何错误?这些是数据大小。

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

事实上,我今天早些时候刚刚在这里找到我正在做的事情的答案。答案在 this post 中。要点是 jags 中的 ifelse() 不是控制流语句,它是一个函数并且 TRUEFALSE 条件都被评估。因此,即使您说如果 t<=L[1] 使用 media1[1:t],也会评估 FALSE 条件,这会产生错误。

另一个问题,一旦您能够解决这个问题,您将重新定义参数 current_window_x,这将引发错误。我认为处理变量 window 宽度的最简单方法就是硬编码 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)
}