比较整数和R中的字符

时间:2019-07-18 08:03:30

标签: r

看来,数字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返回错误吗?

2 个答案:

答案 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