首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么as.numeric(1) == (3 | 4)求值为TRUE?

为什么as.numeric(1) == (3 | 4)求值为TRUE?
EN

Stack Overflow用户
提问于 2018-06-04 07:10:35
回答 3查看 266关注 0票数 3

我想用h == 1 | 2做一个简单的比较,h可以是1到4之间的整数。令我惊讶的是,它不起作用。

我大概能理解为什么

1 == 2|4

真的

甚至可能是为什么

1 == (2 | 4)

真的

但为什么以一切合理和理智的名义

as.numeric(%1) == (%2| 4)

1L == (2 | 4)

3 == 2|4

评估结果为

TRUE

???

我如何才能让R告诉我1 is equal to 2 or 4和答案是否为FALSE

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-04 07:16:22

代码语言:javascript
复制
1 == 2 | 4

Operator precedence告诉我们它等同于(1 == 2) | 4

1 == 2FALSE,4被强制为逻辑(因为|是一个逻辑运算符),as.logical(4)TRUE,所以你有FALSE | TRUE,那就是TRUE

事实上,coercion rules for logical operators (?Logic)告诉我们:

数值和复数向量将被强制为逻辑值,其中零为假,所有非零值为真。

代码语言:javascript
复制
3 == 2 | 4

同样的事情

代码语言:javascript
复制
1 == (2 | 4)

2 | 4将被强制为TRUE | TRUE,即TRUE。然后,1 == TRUE被强制为1 == 1,即TRUE

事实上,coercion rules for comparison operators (?Comparison)告诉我们:

如果两个参数是不同类型的原子向量,则一个参数被强制转换为另一个参数的类型,优先级(降序)为字符、复杂、数字、整数、逻辑和raw。

代码语言:javascript
复制
as.numeric(1) == (2 | 4)

同样的事情

代码语言:javascript
复制
1L == (2 | 4)

又是一样的

1等于2或4

实际上是(1等于2)或(1等于4),即:

代码语言:javascript
复制
(1==2)|(1==4)

这就是

代码语言:javascript
复制
FALSE | FALSE

哪一个是FALSE

票数 7
EN

Stack Overflow用户

发布于 2018-06-04 07:14:06

运行2|4的结果为TRUE。这就是为什么在比较1 == TRUE时会获得TRUE。您想要评估的是(1 == 2) | (1 == 4),它会产生所需的FALSE

票数 4
EN

Stack Overflow用户

发布于 2018-06-04 07:45:54

为你的第一句话中隐含的问题提供预期答案的代码是:

代码语言:javascript
复制
1 %in% 2:4
[1] FALSE

h=1
h %in% 1:2
[1] TRUE

"==“运算符不会从逻辑合取中隐式生成范围(或备选方案的向量)。它被认为是一种“比较”-operator,是“泛型”的,这意味着对于不同的数据类型,方法可以是不同的。它们也是矢量化的(使用有效的隐式回收规则),因此可能会返回许多值:

代码语言:javascript
复制
(1:2) == (1:4)
[1]  TRUE  TRUE FALSE FALSE

并且应用于值1as.numeric()-function将精确地返回输入。

进一步说明:由于您尝试使用的"==“实际上是一个隐式的设置操作,因此您可能需要查看?intersect的帮助页面。还有一些包可以处理更复杂的set函数。

R的强制可以在逻辑和数字之间来回切换,这取决于函数的定义方式:

代码语言:javascript
复制
sum( letters[1:10] %in% letters)
[1] 10

sum( letters[1:10] == letters)
[1] 10
Warning message:
In letters[1:10] == letters :
  longer object length is not a multiple of shorter object length
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档