【问题标题】:Why does "one" < 2 equal FALSE in R?为什么“一”< 2 在 R 中等于 FALSE?
【发布时间】:2015-01-16 06:56:52
【问题描述】:

我正在阅读 Hadley Wickham 关于强制转换的 Advanced R 部分,我无法理解这种比较的结果:

"one" < 2
# [1] FALSE

我假设 R 将 2 强制转换为一个字符,但我不明白为什么 R 返回 FALSE 而不是返回错误。这让我特别困惑,因为

-1 < "one"
# TRUE

所以我的问题是双重的:首先,为什么这个答案,其次,有没有办法看到 R 如何像这些示例一样转换逻辑向量中的各个元素?

【问题讨论】:

  • 提示:sort(c("one","2","-1","10"))(10 不是必需的,但可能会给您另一个示例:"10"&lt;"2"
  • 这种怪癖出现在所有编程语言中,请尽量注意您正在使用的数据类型,并将苹果与苹果和橙子与橙子进行比较。
  • 强制在 R 中很普遍。它是一种弱类型语言。如果您不喜欢该功能,请使用 Java。当您查看带有“'\t9999' < " 00000"
  • 感谢您的提示。我可以看到“排序”如何揭示答案,但我仍然不明白排序本身是如何工作的。 (我尝试了排序的帮助,但没有找到关于这个特定问题的解释)。(好的,基于 BondedDust,我明白为什么“10”

标签: r boolean comparison boolean-logic coercion


【解决方案1】:

来自help("&lt;")

如果两个参数是不同类型的原子向量,一个是 强制为另一个类型,(递减)优先顺序 是字符,复杂,数字,整数,逻辑和原始。

所以在这种情况下,数字的优先级低于字符。所以2 被强制转换为字符"2"。字符向量中字符串的比较是按字典顺序进行的,据我所知,它是按字母顺序排列的,但取决于语言环境。

【讨论】:

    【解决方案2】:

    它将 2 强制转换为一个字符,然后进行字母比较。并且假定数字字符在字母字符之前

    要大致了解该行为,请尝试

    'a'<'1'
    '1'<'.'
    'b'<'B'
    'a'<'B'
    'A'<'B'
    'C'<'B'
    

    【讨论】:

    • 我想知道是否有任何通用(即跨区域通用)保证数字在排序顺序中位于字母字符之前?
    • 谢谢。我会将这个和 jdharrison 的一个标记为都是正确的,但看来我只能这样标记其中一个。
    猜你喜欢
    • 2014-07-04
    • 1970-01-01
    • 2021-10-08
    • 2018-10-17
    • 2010-12-22
    • 2022-04-12
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多