评估为 NA 的逻辑表达式

Logical expression evaluating to NA

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

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

但是,我收到了错误消息 "Error in if (condition) { : argument is not interpretable as logical"。调试后,我发现每当 x[1] == 0 时就会产生错误。不知何故,当 x[1] == 0 时,逻辑表达式的计算结果为 NA。对于其他值,它按预期工作。为什么会这样,我该如何预防?

为防止这种情况,您应该修改您的目标。 NA 不仅在 x[1] 为零时出现,它在 x[1] > 1e-4 计算为 FALSE.

时出现
TRUE %% FALSE
[1] NA
FALSE %% FALSE
[1] NA

这显然是有道理的,我只是惊讶地看到它不是 return NaN:

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

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