代码之家  ›  专栏  ›  技术社区  ›  RLave

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

  •  1
  • RLave  · 技术社区  · 7 年前

    有人能解释为什么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 回复  |  直到 7 年前
        1
  •  3
  •   Tim Biegeleisen    7 年前

    要引用已引用的优先规则,请执行以下操作:

    优先顺序(递减)为字符、复数、数字、整数、逻辑和原始

    因此,在表达式中:

    "-abc" < 0
    

    0 在RHS上被强迫扮演角色。这就给我们留下了:

    "-abc" < "0"
    

    这在词典上是正确的(你可以自己检查)。因此表达式的计算结果为true。请注意,如果强制是另一种方式,即如果R试图强制 "-abc" 如果是数字类型,则会导致 NA ,整个表达式的计算结果将为 NA , 正确:

    "-abc" < 0
    NA < 0
    NA
    

    所以,这就是为什么我们知道R是在强迫RHS扮演角色。