【问题标题】:How do T & F work as abbreviations for TRUE & FALSE in R?T & F 如何在 R 中作为 TRUE & FALSE 的缩写?
【发布时间】:2019-08-20 09:47:29
【问题描述】:

T 和 F 不是 R 中的保留关键字,而 TRUE 和 FALSE 是。但是,T和F在很多地方仍然可以用作TRUE和FALSE的缩写。

我在 R 语言规范中找不到对此的任何引用;也许我错过了什么:

https://cran.r-project.org/doc/manuals/R-lang.pdf

我知道如果 T 或 F 被覆盖,使用缩写会导致一些致命的错误结果:

T <- FALSE
print(T)
print(F)

所以我想知道什么机制允许使用 T 和 F 作为缩写? 为什么一开始就允许这样做?

编辑的额外说明:

写完这个问题后,我立即继续在 R 中工作,发现使用缩写而不是完整的布尔值 TRUE 和 FALSE 是多么危险。因为我已经在我的 RStudio 控制台中测试了上面的代码 T 在我的环境中被覆盖为 FALSE;当我开始运行一些脚本时,一切都开始出错了,因为直到今天我一直使用缩写词,当然 T 现在表现为 FALSE。

我花了 5 分钟才弄清楚出了什么问题,但如果我还没有意识到这个问题并且最近没有考虑到这个问题,我可能需要更长的时间。

所以不要使用缩写! :)

【问题讨论】:

    标签: r specifications


    【解决方案1】:

    它们是base 命名空间中的对象。

    find("T")
    [1] "package:base"
    find("F")
    [1] "package:base"
    

    从技术上讲,您不会覆盖它们,而是在掩蔽这些对象的搜索路径中具有更高优先级的环境中创建对象(很可能是全局环境),但您仍然可以直接访问它们。

    T <- FALSE
    T
    [1] FALSE
    base::T
    [1] TRUE
    

    【讨论】:

      【解决方案2】:

      逻辑向量https://stat.ethz.ch/R-manual/R-devel/library/base/html/logical.html的文档中有关于此的声明:

      "TRUE and FALSE are reserved words denoting logical constants in the R language, whereas T and F are global variables whose initial values set to these. All four are logical(1) vectors."
      

      所以 T 和 F 是全局环境中的变量。但您可以合理地重新定义这些变量。

      虽然它们为交互使用提供了有用的简写,但我会尽量避免在包/脚本中使用它们。

      【讨论】:

        【解决方案3】:

        来自?logical

        TRUE 和 FALSE 是保留字,表示 R 语言中的逻辑常数,而 T 和 F 是初始值设置为这些的全局变量。所有四个都是逻辑 (1) 向量。

        所以TF 最初分别设置为TRUEFALSE,以后可以更改。

        所以T &lt;- 0 有效,但TRUE &lt;- 0 无效

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-28
          • 2020-12-15
          • 2023-03-31
          • 1970-01-01
          • 2021-06-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多