为什么R中"one"<2等于FALSE?

Joe*_*oeF 15 comparison boolean-logic boolean r coercion

我正在阅读Hadley Wickham关于强制的高级R部分,我无法理解这种比较的结果:

"one" < 2
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

我假设R将2强制转换为一个字符,但我不明白为什么R返回FALSE而不是返回错误.这对我来说尤其令人费解

-1 < "one"
# TRUE
Run Code Online (Sandbox Code Playgroud)

所以我的问题有两个方面:首先,为什么这个答案,第二,有没有办法看到R如何在这些例子中转换逻辑向量中的各个元素?

jdh*_*son 15

来自help("<"):

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

所以在这种情况下,数字的优先级低于字符.所以2是强迫角色"2".字符向量中字符串的比较是词典,据我所知,它是字母的,但依赖于语言环境.


Oga*_*anM 9

它将2强制转换为字符,然后按字母顺序进行比较.假设数字字符在字母字符之前

对行为进行总体思考尝试

'a'<'1'
'1'<'.'
'b'<'B'
'a'<'B'
'A'<'B'
'C'<'B'
Run Code Online (Sandbox Code Playgroud)