评估为 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
解析器足够聪明,可以识别逻辑值和数值之间的差异。
在 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
解析器足够聪明,可以识别逻辑值和数值之间的差异。