0

我一直在尝试运行此代码(在此处下方)并且收到消息“if (temp[ii] == 0) { 中的错误:需要 TRUE/FALSE 的缺失值”...

temp = c(2.15, 3.5, 0, 0, 0, 1.24, 5.42, 6.87)
tm = length(temp)
for (i in 1:tm){
    if (temp[i] == 0) {
        counter3 = 1
        last = temp[i - 1]
        for (ii in i + 1:tm){
            if (temp[ii] == 0) {
                counter3 = counter3 + 1
            }
            if (temp[ii] != 0) {
                nxt = temp[i + counter3]
            }
        }
    }
}
4

3 回答 3

3

您的问题是因为超出范围temp[ii]而返回:NAii

ii = i + 1:tm     #Your declaration for ii
ii = 1:tm + 1:tm  #Evaluates to

所以ii肯定会大于tm(因此length(temp)在某些时候。

为了更好地理解/调试for循环,请考虑仅打印索引:

for(i in 1:tm)
{
    print(i)
    for(ii in i + 1:tm)
        print(ii)
}
于 2013-03-08T16:52:00.563 回答
2

猜测一下,我会说这是在R-如果是这样,我猜这行:

if (temp[i] == 0) (or temp[ii] == 0)

产生一个NA,if条件必须有一个TRUEorFALSE值。

如果可以的话,使用调试器,我会在if块之前询问 temp[i] 的值。

于 2013-03-08T16:40:06.543 回答
1

不了解语言很难,但我认为问题在于,当 i 处于上限时,ii 中的值可能大于 temp 的长度。我本来期望索引超出范围或类似的东西,但不知道语言,谁知道!希望你能解决你的问题。

于 2013-03-08T16:30:09.860 回答