我有一个字符串,当与数字比较时,它没有中断并说这是肯定的,有什么暗示为什么会发生这种情况?
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"
答案 0 :(得分:6)
?'>'
...如果两个参数是不同类型的原子向量,则一个是 强迫其他类型,优先级(递减) 是字符,复杂,数字,整数,逻辑和原始...
因此,当您将{em}字符向量x
与数字类型的0
进行比较时,前者将转换为字符{{ 1}}:
'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...'
如果,为了证明我们的假设,我们问自己,查克·诺里斯(Chuck Norris)是否能够击败无限,我们发现事实并非如此:
[1] x is positive
相反,正如任何人所期望的那样,基思·理查兹对此毫无疑问:
'Chuck Norris' > Inf
# [1] FALSE