为什么“<some string =”“>”&gt; = <a number=""> is TRUE?

时间:2015-05-16 01:26:25

标签: r

Maybe it is a silly question but playing with subsetting I faced this thing and I can't understand why it happens. For example let's consider a string, say "a", and an integer, say 3, why this expression returns TRUE?

"a" >= 3
[1] TRUE

1 个答案:

答案 0 :(得分:8)

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

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

> "a" < "b"
[1] TRUE
> "b" > "c"
[1] FALSE

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

"a" >= 3
[1] TRUE

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

  

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

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