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
答案 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语言环境的代码点顺序(并且可能不会相同 在不同的字符集中订购相同的语言)。整理 非字母(空格,标点符号,连字符,分数等) 甚至更成问题。
这很重要,如果逻辑运算符用于比较字符串(无论是否将数字与数字进行比较),都应该考虑这一点。