看来,数字as.character()
仍然是数字,我觉得这很直观。考虑以下示例:
1 > "2"
[1] FALSE
2 > "1"
[1] TRUE
即使我尝试使用as.character()
或paste()
as.character(2)
[1] "2"
as.character(2) > 1
[1] TRUE
as.character(2) < 1
[1] FALSE
那是为什么?在将数字与字符串进行比较时,我不能让R返回错误吗?
答案 0 :(得分:3)
如评论中所述,问题在于数字1被强制转换为字符。
<
操作仍然适用于字符。如果一个字符按字母顺序排在首位,则该字符要小于另一个字符。
> "a" < "b"
[1] TRUE
> "z" < "b"
[1] FALSE
因此,在您的情况下,as.character(2) > 1
转换为as.character(2) > as.character(1)
,并且由于数字TRUE
的“字母顺序”而返回。
为防止这种情况,您必须手动检查对象的类。
答案 1 :(得分:2)
?Comparison
的文档中指出
如果两个参数是不同类型的原子向量,则一个被强制转换为另一个类型,优先级的(降序)顺序为字符,复杂,数字,整数,逻辑和原始。
因此,在您的情况下,数字会自动强制为字符串,并且会根据各自的排序规则进行比较。
为了防止这种情况,我知道的唯一选择是先手动比较class
。