为什么R 3.6.0在计算表达式(“ Dogs” <“ cats”)时返回FALSE?

Dr.*_*PhD 12 ascii r case

我有一些复杂的代码,但是我没有向您展示这一点,而是要提取问题的实质。

评估:"dogs" < "cats"…应评估为FALSER 3.6。

评估:"Dogs" < "cats"…这应该评估为,TRUE因为“ D”的ASCII码为68,而“ c”的ASCII码为99。由于68 <99,因此"Dogs" < "cats"应评估为TRUE,但在R 3.6.0中不这样。然而,当我尝试使用上的控制台窗口https://datacamp.com网站,表达"Dogs" < "cats"返回TRUE和表达式"dogs" < "Cats"返回FALSE-如预期。

因此,我的问题是,为什么R 3.6.0返回FALSE"Dogs" < "cats")?

C. *_*aun 15

DataCamp的解释器显示:

> Sys.getlocale()
[1] "C"
Run Code Online (Sandbox Code Playgroud)

而我的,也许你的是:

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

使用“ C”语言环境时,将按字符的ascii值比较字符,而对于en_US.UTF-8,它们的字符为aAbBcC,依此类推。

如注释中所述,这在关系运算符的文档中进一步说明:

字符向量中字符串的比较是使用所使用语言环境的整理顺序对字符串进行的字典编排:请参见语言环境。诸如en_US之类的语言环境的整理顺序通常与C(应使用ASCII)不同,并且可能令人惊讶。谨防对归类顺序进行任何假设:例如,在爱沙尼亚语中,Z介于S和T之间,并且归类不一定是逐个字符-在丹麦语aa中,单个字母在z之后。在威尔士语中,ng可能是也可能不是单个排序单位:如果是,则紧跟g。某些平台可能不遵守语言环境,并且始终以8位语言环境中字节的数字顺序进行排序,而对于UTF-8语言环境,则始终以Unicode代码点顺序进行排序(并且对于相同的语言,可能不会以相同的顺序进行排序)。不同的字符集)。校对非字母(空格,标点符号,