首页 > 解决方案 > 为什么 as.numeric(1) == (3 | 4) 评估为 TRUE?

问题描述

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

我可以理解为什么

1 == 2 | 4

真的

也许甚至为什么

1 == (2 | 4)

真的

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

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

或者

1L == (2 | 4)

或者

3 == 2 | 4

评估为

真的

???

我怎样才能让 R 告诉我是否1 is equal to 2 or 4以及答案会是FALSE

标签: r

解决方案


1 == 2 | 4

运算符优先级告诉我们它等价于(1 == 2) | 4

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

事实上,逻辑运算符( )的强制规则?Logic告诉我们:

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


3 == 2 | 4

一样


1 == (2 | 4)

2 | 4将被强制为TRUE | TRUE,也就是TRUE。然后1 == TRUE被强制到1 == 1哪个是TRUE

事实上,比较运算符( ?Comparison) 的强制规则告诉我们:

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


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

一样


1L == (2 | 4)

又是一样


1 等于 2 或 4

实际上是(1等于2)或者(1等于4),也就是:

(1==2)|(1==4)

这是

FALSE | FALSE

这是FALSE


推荐阅读