【问题标题】:Logical expression evaluating to NA评估为 NA 的逻辑表达式
【发布时间】:2017-07-15 18:31:31
【问题描述】:

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

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

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

【问题讨论】:

  • 严肃的问题:你认为 %% 运算符是做什么的?
  • 我现在看到我在打算使用 && 时输入了 %%

标签: r logical-operators


【解决方案1】:

为了防止这种情况,您应该修改您的目标。 NA 不会仅在 x[1] 为零时出现,它会在 x[1] &gt; 1e-4 评估为 FALSE 时出现。

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

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

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

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

【讨论】:

  • 与解析器无关,这里的逻辑值被强制转换为整数。结帐 1L %% 0L。
  • @Roland:谢谢,我应该在发表声明之前检查一下。
猜你喜欢
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多