我一直在尝试运行此代码(下面这里)并且我收到了消息“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]
}
}
}
}
答案 0 :(得分:3)
您的问题是temp[ii]
正在返回NA
因为ii
超出界限:
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)
}
答案 1 :(得分:2)
猜测我会说这是R
- 如果是这样的话,我猜这一行:
if (temp[i] == 0) (or temp[ii] == 0)
产生NA
,if
条件的值必须为TRUE
或FALSE
。
如果可以的话,使用调试器,我会在if
块之前询问temp [i]的值。
答案 2 :(得分:1)
在不知道语言的情况下很难,但我认为问题是当i处于上限时,ii中的值可能大于temp的长度。我曾经期望索引超出范围或者类似的东西但是,在不知道语言的情况下,谁知道!希望你能解决问题。