首页 > 解决方案 > 为什么悲伤的文字是正面的?

问题描述

我有一个字符串,在与数字比较时它不会中断并说这是肯定的,任何提示为什么会发生这种情况?

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"

标签: rstringnumbers

解决方案


?'>'

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

因此,当您比较xwhich 是字符向量时, 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

推荐阅读