r - 为什么 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
?
解决方案
1 == 2 | 4
运算符优先级告诉我们它等价于(1 == 2) | 4
1 == 2
is 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
推荐阅读
- jenkins - 由于许可,无法使用 Helm 在 Minikube 上安装 Jenkins
- python - 使用 FeedParser 导入 RSS 并将帖子和一般信息获取到单个 Pandas DataFrame
- javascript - 在机器人框架 selenium2library 中保存 javascript 的返回值给出 0
- python - 不使用函数按升序对三个数字进行排序
- android - 在 Graphql 突变上获取内部服务器错误 500
- javascript - 删除属性和类
- azure - Azure API 管理速率限制(按 Json 正文)
- python - 有没有办法让不和谐的机器人屏幕共享网站
- android - 显示键盘时全屏 AlertDialog 有 janky 动画
- reactjs - jsonserver 不使用重写器重定向