1

我用 R 编写的程序有时(不总是,但几乎总是在多次运行模拟时)显示以下错误消息:

Error in if (sum.wt1y1 == 0 | sum.wt2y2 == 0) zn[k] <- 0 else zn[k] <- (sum.wt1y1 *  : 
  missing value where TRUE/FALSE needed

谁能解释一下这个错误信息的含义是什么?我找不到错误在哪里。最终输出是一个向量。现在在该向量中最多显示一些值,但当出现错误消息时,其余部分为 0、0、0、...、0。如果没有出现错误消息,则向量的所有位置都填充有值(没有零)。

4

3 回答 3

8

错误通常是由于NA值引起的:

if (NA == 0) print('foo')

# Error in if (NA == 0) print("foo") : 
#   missing value where TRUE/FALSE needed

解决方案是删除缺失值或对它们进行检查:

if (!is.na(x) & x == 0) ...
于 2013-02-21T18:42:25.650 回答
1

为了扩展@justin 所说的内容,错误消息本质上是在告诉您它期待一个 T/F 但没有得到它。

当您看到这样的错误时,最好的办法是探索语句
中括号内的值。if( .... )

在这种特定情况下,查看sum.wt1y1 == 0 | sum.wt2y2 == 0可能会帮助您找到罪魁祸首。

于 2013-02-21T18:52:44.340 回答
1

试试这个:

which(is.na( sum.wt1y1 == 0 | sum.wt2y2 == 0))
于 2013-02-21T18:57:20.433 回答