【问题标题】:#R curious about how R compares character with number? [duplicate]#R 好奇 R 如何比较字符和数字? [复制]
【发布时间】:2022-01-20 04:44:25
【问题描述】:

这是我在 R 中找到的:

>   "20" < 3
[1]  TRUE
>   "20" < 2
[1]  FALSE

我试图找出“20”的确切数字。所以基本上,“20”在 2.99999999999999489 和 2.99999999999999490 之间,这是为什么呢?

此外,“200”和“2000”(等等......)与“20”具有相同的范围,但有线的东西是 R 给了我这个:

>  "20" == "200"
[1]  FALSE
>  "200" == "2000"
[1]  FALSE

我相信它们不一样,但是 R 将它们存储在不同的数字中,范围为“20”。所以除了为什么之外,我更好奇R如何将字符存储在数字中,我的意思是如果“200”和“2000”是2.999999999999999489和2.999999999999999490之间的不同数字,那么它们之间有多少个数字? (我知道实数是无限的,但必须有一个 R 决定结束的数字)

【问题讨论】:

  • 字符串的比较是逐个字符进行的,直到发现不等式。也就是说,"2" &gt; "10" 为真,因为"2" &gt; "1" 为真,并且它停止了。在您的第一种情况下,"2""3" 进行比较,发现“小于”,因此它以真值停在那里。在您的第二种情况下,"20" &lt; 2,它检查"2""2" 并发现它们相等,然后检查"0"&lt;nothing&gt;,这是不正确的,所以它返回错误(无法进行更多比较)。

标签: r algorithm


【解决方案1】:

&lt; 的帮助告诉我们:

If the two arguments are atomic vectors of different types,
one is coerced to the type of the other,
the (decreasing) order of precedence being
character, complex, numeric, integer, logical and raw.

所以当您执行"20" &lt; 3 时,R 在内部将 3 转换为“3”。所以这变成了"20" &lt; "3"。 字符串之间的比较是字典顺序的(与字典中的单词顺序相同)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2015-04-27
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多