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

为什么R 3.6.0在计算表达式(“Dogs”和“cats”)时返回FALSE?,r,case,ascii,R,Case,Ascii,我有一些复杂的代码,但我不会向您展示,而是要提取问题的本质 评估:“dogs”

我有一些复杂的代码,但我不会向您展示,而是要提取问题的本质

评估:
“dogs”<“cats”
…这应该评估为
FALSE
,在R3.6中也是如此

评估:
“Dogs”<“cats”
…这应该评估为
TRUE
,因为“D”的ASCII码是68,“c”的ASCII码是99。由于68<99,
“Dogs”
应该计算为
TRUE
,但在R3.6.0中没有。但是,当我尝试使用网站上的控制台窗口时,表达式
“Dogs”<“cats”
返回
TRUE
,表达式
“Dogs”<“cats”
返回
FALSE
——与预期一致


因此,我的问题是,为什么R3.6.0对(
“狗”<“猫”
)返回
FALSE

DataCamp的解释器显示:

> Sys.getlocale()
[1] "C"
而我的,也许你的是:

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"
在“C”语言环境中,字符通过其ascii值进行比较,而对于en_US.UTF-8,字符则通过aAbBcC进行比较,以此类推

如评论中所述,这将在关系运算符的文档中进一步解释:

字符向量中字符串的比较是使用所用语言环境的排序顺序在字符串中进行字典排序的:请参阅语言环境。像en_US这样的区域设置的排序顺序通常与C(应该使用ASCII)不同,这可能会令人惊讶。注意不要对排序顺序做出任何假设:例如,在爱沙尼亚语中,Z位于S和T之间,排序不一定是逐字符的——在丹麦语中,aa排序为Z之后的单个字母。在威尔士,ng可能是也可能不是一个单独的排序单位:如果是,则跟随g。某些平台可能不尊重区域设置,并且在8位区域设置中总是按字节的数字顺序排序,或者在UTF-8区域设置中总是按Unicode代码点顺序排序(对于不同的字符集,对于相同的语言,可能不会按相同的顺序排序)。非字母(空格、标点符号、连字符、分数等)的排序问题更大


比较帮助文件中“one”<2为什么在R中等于FALSE?的可能重复:“字符向量中字符串的比较是使用所用语言环境的排序顺序在字符串中进行的字典式比较:请参阅语言环境。语言环境(如en_US)的排序顺序通常不同于C(应使用ASCII)这可能会让人惊讶。“可能是的副本,所以我猜您的区域设置与Datacamp控制台使用的区域设置不同。请查看在每种情况下
Sys.getlocale()
返回的内容。