有人可以解释为什么R会这样做吗?它背后的原因呢?
"-1" < 0
#[1] TRUE
# expected [1] FALSE # OR better NA
"-abc" < 0
#[1] TRUE
# expected [1] FALSE # OR better NA
来自 ?Comparison
:
如果两个参数是不同类型的原子向量,则一个被强制为另一个的类型,优先级的(递减)顺序为字符,复数,数字,整数,逻辑和原始
这对FWIW都没有帮助:
toString(-1) < 0
as.character(-1) < 0
toString("-abc") < 0
as.character("-abc") < 0
期待不同的结果我错了吗?我问这个,因为在我看来,如果不知道的话,这会在函数内部产生意想不到的结果 .
1 回答
引用您已经引用的优先规则:
所以在表达式中:
正在发生的事情是,RHS上的
0
正被强迫进入角色 . 这让我们:这在词典上是真实的(你可以自己检查) . 因此表达式的计算结果为true . 请注意,如果强制转向另一种方式,即如果R试图强制
"-abc"
为数字类型,那么它将导致NA
,并且整个表达式将评估为NA
,而不是真的:所以,这就是我们如何知道R正在强迫RHS加入角色 .
R(或SQL,Java,JavaScript,实际上是任何语言)的一个好的经验法则是不要乱用类型 . 如果您知道您的数据是数字,那么使用数字类型并将其视为这样,反之亦然 .