切片向量显示错误超出范围
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()
不是控制流语句,它是一个函数并且 TRUE
和 FALSE
条件都被评估。因此,即使您说如果 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)
}
我有这部分 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()
不是控制流语句,它是一个函数并且 TRUE
和 FALSE
条件都被评估。因此,即使您说如果 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)
}