有人能解释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
我期望一个不同的结果是错的吗?我之所以这么问,是因为在我看来,如果不知道的话,函数内部可能会出现意外结果。
引用您已经引用的优先级规则:
优先顺序为字符、复数、数字、整数、逻辑和原始
因此在表达式中:
"-abc" < 0
发生的情况是RHS上的0
被强制为字符。这给我们留下了:
"-abc" < "0"
这在字典上是正确的(你可以自己检查一下(。因此表达式的计算结果为true。请注意,如果强制是另一种方式,即如果R试图将"-abc"
强制为数字类型,那么它将导致NA
,并且整个表达式的计算结果将为NA
,而不是true:
"-abc" < 0
NA < 0
NA
所以,这就是我们知道R强制RHS字符的方式。
在R(或SQL、Java、JavaScript,实际上是任何语言(中,一个很好的经验法则是不要乱处理类型。如果您知道您的数据是数字的,那么使用数字类型并将其视为数字类型,反之亦然。