r - 为什么悲伤的文字是正面的?
问题描述
我有一个字符串,在与数字比较时它不会中断并说这是肯定的,任何提示为什么会发生这种情况?
x <- "The day is bad, I don't like anything! I feel bad and sad really sad"
if (x == 0) {
print("x is equal to 0")
}else if (x > 0) {
print("x is positive")
}else if (x < 0 ){
print("x is negative")
}
结果是:
"x is positive"
解决方案
?'>'
...如果两个参数是不同类型的原子向量,则将一个强制转换为另一个的类型,优先级(递减)顺序为字符、复杂、数字、整数、逻辑和原始...
因此,当您比较x
which 是字符向量时, to 0
,即数字类型,前者被转换为 character '0'
:
x == 0
评估为FALSE
因为"The day is bad..." != "0"
;x < 0
计算结果为,FALSE
因为在排序时,0
放置在 之前"The day is bad..."
:
...字符向量中字符串的比较是使用正在使用的语言环境的整理顺序在字符串中按字典顺序进行的...
sort(c(x, 0))
#[1] "0"
#[2] "The day is bad, I don't like anything! I feel bad and sad really sad"
由于词典顺序,这意味着x
被认为大于。'0'
- 最后
x > 0
评估为TRUE
因为'0'
先于'The day is bad, I dont...'
并且您的代码返回[1] x is positive
如果为了证明我们的假设,我们问自己,查克·诺里斯是否能够击败 Infinity,我们会发现事实并非如此:
'Chuck Norris' > Inf
# [1] FALSE
相比之下,正如任何人所期望的那样,基思理查兹对此没有任何问题:
'Keith Richards' > Inf
# [1] TRUE
推荐阅读
- powerbi - 无法在 Power Bi 中显示视觉效果
- c - ADXL345 只读 ceros
- java - 坚持理解递归
- c++ - 如何修复 AF_UNIX 中 bind() 返回的“地址已在使用中”
- opengl - OpenGL 0(84):错误 C7623:类型从“vec4”隐式缩小到“float”
- tensorflow-datasets - tensorflow_datasets.load() 下载但无法提取某些数据集
- python - 如何在 Python 中定义自己的范围函数
- html - 是否可以使用旧学校页面转换元标记?
- twitter-bootstrap - Bootstrap4 - 从另一个按钮/标签触发选项卡链接
- html - 标题栏中的右侧项目未垂直居中。float:right'ed 项目似乎不继承 *ed 属性