2017-07-15 88 views
-1

在R,I有一个函数离群值接受长度3的数值矢量我试图这样:逻辑表达式计算到NA

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

然而,我正在错误消息“中的错误,如果(条件){:参数不能解释为逻辑“。调试完成后,我发现每当x [1] == 0时都会产生错误。某种程度上,当x [1] == 0时,逻辑表达式的计算结果为NA。与其他值一样按预期工作。这是为什么,我该如何防止它?

+4

严重问题:您认为%%运算符有什么作用? – Roland

+0

我现在看到,当我打算使用&& – traviata

回答

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解析器是足够聪明的认识逻辑和数值之间的差值。

+0

时,我输入了%%与解析器无关,逻辑值在这里被强制为整数。退房1L %% 0L。 – Roland

+0

@罗兰:谢谢,我应该在发表声明之前检查一下。 –