为什么"<some string>"> = <a number>为真?

Sab*_*DeM 3 r

也许这是一个愚蠢的问题,但玩子集我遇到了这个问题,我无法理解为什么会发生这种情况.例如,让我们考虑一个字符串,比方说"a",和一个整数,比如3,这个表达式返回的原因TRUE

"a" >= 3
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

Mol*_*olx 8

当您尝试将字符串与整数进行比较时,R会将数字强制转换为字符串,因此3变为"3".

在字符串上使用逻辑运算符将根据字母顺序检查条件是真还是假.例如:

> "a" < "b"
[1] TRUE
> "b" > "c"
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

出现这种结果是因为对于R,升序是a, b, c.数字通常以字母顺序排在字母之前(只检查按名称排序的文件,以数字开头).这就是你得到的原因

"a" >= 3
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

最后,请注意,您的结果可能会有所不同,具体取决于您的区域设置以及如何在其上定义字母顺序.手册说:

字符向量中字符串的比较是使用正在使用的语言环境的整理顺序在字符串中进行词典编写:请参阅语言环境.诸如en_US的语言环境的整理顺序通常不同于C(应该使用ASCII)并且可能令人惊讶.谨防对整理顺序做出任何假设:例如,在爱沙尼亚语Z中介于S和T之间,并且整理不一定是逐个字符的 - 在丹麦语中作为单个字母排序,在z之后.在威尔士语中,可能是也可能不是单个排序单元:如果是,则遵循g.某些平台可能不遵守语言环境,并且始终按照8位语言环境中的字节数字顺序排序,或者以UTF-8语言环境的Unicode代码点顺序排序(并且可能不会按相同的顺序排序相同的语言)不同的字符集).非字母(空格,标点符号,连字符,分数等)的整理更成问题.

这很重要,如果逻辑运算符用于比较字符串(无论是否将它们与数字进行比较),都应该考虑这一点.