【问题标题】:Error .. missing value where TRUE/FALSE needed错误 .. 需要 TRUE/FALSE 的地方缺少值
【发布时间】:2013-02-24 06:22:52
【问题描述】:

我一直在尝试运行此代码(在此处下方)并且收到消息“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]
            }
        }
    }
}

【问题讨论】:

  • 如果你 a) 提到了语言,B) 修正了你的格式,可能会有所帮助。
  • -1 表示不搜索。此问题已在本站、R-help 等上多次回答。下次发问题前先搜索错误,您自己可能会更快地回答问题。
  • 此问题已在此线程中得到解答:stackoverflow.com/questions/7355187/…

标签: r for-loop message


【解决方案1】:

您的问题是 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)
}

【讨论】:

  • 感谢您的回答,但我仍然收到相同的消息 =/
  • 当我运行该代码时,我得到了 counter3=3 last=3.5 nxt=1.24 的正确答案,没关系!唯一的问题是我收到的消息,由于我不熟悉 R,所以很难修复!还是谢谢你
  • 你没有多大意义。为什么你有for(ii in i+1:tm) 而不仅仅是for(ii in 1:tm)
【解决方案2】:

我猜我会说这是在R - 如果是这样我猜这行:

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

导致NA,并且if 条件必须具有TRUEFALSE 值。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 1970-01-01
      • 2018-08-09
      • 2012-10-11
      • 2020-04-22
      • 1970-01-01
      • 2023-01-17
      • 2011-11-13
      • 2020-07-29
      相关资源
      最近更新 更多