评估为NA

时间:2017-07-15 18:31:31

标签: r logical-operators

在R中,我有一个函数Outlier,它接受一个长度为3的数字向量。我正在尝试这个:

Outlier <- function(x) {
  x <- sort(x)
  if((x[1] < 1e-2) %% (x[1] > 1e-4))) {
print(x)
  }
...

但是,我收到错误消息“如果(条件){:参数不可解释为逻辑错误”。调试之后,我发现每当x [1] == 0时就会产生错误。不知何故,当x [1] == 0时,逻辑表达式的计算结果为NA。使用其他值,它可以按预期工作。为什么会这样,我该如何预防呢?

1 个答案:

答案 0 :(得分:2)

为了防止这种情况,您应该修改目标。 NA仅在x[1]为零时才会显示,只要x[1] > 1e-4评估为FALSE,它就会显示。

TRUE %% FALSE
[1] NA
FALSE %% FALSE
[1] NA

这显然是有道理的,我只是惊讶地发现它没有返回NaN

1 %% 0
[1] NaN
0 %% 0
[1] NaN

这使我得出结论,R解析器足够聪明,可以识别逻辑值和数值之间的差异。