【问题标题】:What is the rationale for as.logical double coercion?as.logical 双重强制的基本原理是什么?
【发布时间】:2015-12-17 13:55:29
【问题描述】:

我试图理解双打的强制原理:

as.logical(c(-1, -0.01, 0, 0.01, 0.1,1:10))
#>  [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
#> [12]  TRUE  TRUE  TRUE  TRUE

我可以看到强制发生在标量上(符号无关紧要)并且 只有 0 被强制转换为 FALSE。对此我感到很惊讶, 似乎没有“最接近...”或四舍五入到 0L 或 1L 的概念。 我很好奇为什么。

我确实尝试过四处寻找洞察力 here 但没有成功。

我也看了this related question

有人能解释一下为什么我应该期待上述每个测试值吗 像他们那样胁迫?

【问题讨论】:

    标签: r boolean r-faq


    【解决方案1】:

    我的猜测是这是从 C 继承的,例如来自here

    在 C 中,true 由任何不等于 0 的数值表示,false 由 0 表示

    另见例如here;目前我找不到更好的官方语言规范来源。

    Kernighan 和 Ritchie 2d ed 的盗版副本。我在网上找到(我宁愿不链接到它)在 p 上说。 50,第 3.2 节,“If-Else”(已添加重点):

    表达式被计算;如果为真(即如果表达式具有非零值),则执行语句 1。如果它为假(表达式为零)并且如果有 else 部分,则执行语句 2。

    @hrbrmstr 指出用于转换的 LOGICAL 的 R 内部定义位于 Rinternals.h:

    #define LOGICAL(x) ((int *) DATAPTR(x))
    

    【讨论】:

    • 我想问题就变成了为什么这是C中定义的基本原理!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多