我有一些复杂的代码,但我不会向您展示这些代码,而是要提取问题的本质。
评价:"dogs" < "cats"
…这应该评估为FALSE
R 3.6 也是如此。
评价:"Dogs" < "cats"
…这应该评估为TRUE
因为“D”的 ASCII 代码是 68,而“c”的 ASCII 代码是 99。由于 68 "Dogs" < "cats"应该评估为TRUE
,但 R 3.6.0 中没有。但是,当我尝试使用控制台窗口时https://datacamp.com https://datacamp.com网站、表达方式"Dogs" < "cats"
回TRUE
和表达"dogs" < "Cats"
回FALSE
- 正如预期的那样。
因此,我的问题是,为什么 R 3.6.0 返回FALSE
for ("Dogs" < "cats"
) ?
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 代码点顺序排序(对于相同的语言,可能不会按相同的顺序排序)不同的字符集)。非字母(空格、标点符号、连字符、分数等)的排序更成问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)