r-使用关系运算符的字符的行为



有人能解释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,实际上是任何语言(中,一个很好的经验法则是不要乱处理类型。如果您知道您的数据是数字的,那么使用数字类型并将其视为数字类型,反之亦然。

相关内容

  • 没有找到相关文章

最新更新