【问题标题】:Using Subscripts and Superscripts in R console在 R 控制台中使用下标和上标
【发布时间】:2016-02-15 10:27:43
【问题描述】:

这更多是出于好奇,但是否可以在 R 控制台中编写下标,如果可以,我该怎么做?

  • 我使用的是 Mac 并且
  • 通常在 RStudio 中编写代码

虽然赋值语句使用希腊字母,例如μ,σ,但我无法让上标或下标工作。我想写一个分配语句,例如σ² <- 1 并让它被识别。特别是,输入最后一个命令我收到以下错误消息

Error: unexpected input in "σ�"

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

    可以,但你不应该;不符合 R 标准的名称最终会导致问题。

    规则,来自?Quotes

    名称和标识符

    标识符由一系列字母、数字、句点 (.) 和下划线。它们不能以数字或下划线开头, 也不是句点后跟一个数字。保留字无效 标识符。

    字母的定义取决于当前的语言环境,但仅限于 ASCII 数字被认为是数字。

    此类标识符也称为句法名称,可以使用 直接在R代码中。几乎总是可以使用其他名称,前提是 他们被引用。首选引号是反引号 (`),并且 deparse 通常会使用它,但在许多情况下单或双 可以使用引号(因为字符常量通常会转换为 一个名字)。反引号可能必不可少的一个地方是分隔 公式中的变量名:见公式。

    如果您仍然想打破规则,有几种方法。你可以使用assign:

    > assign('σ²', 47)
    > `σ²`
    [1] 47
    > σ²
    Error: unexpected input in "σ�"
    

    但是请注意,根据您的语言环境,您可能需要将 σ² 包含在反引号中才能成功调用它。

    你也可以用反引号包裹它来赋值:

    > `σ²` <- 47
    > `σ²`
    [1] 47
    > σ²
    Error: unexpected input in "σ�"
    

    如您所见,您可能仍需要将所有调用包含在反引号中(尤其是如果您希望您的代码具有微弱的可移植性)。

    也就是说,这完全是一个非常非常糟糕的想法。

    1. 您的变量名将难以输入;
    2. 您的代码可能无法移植;
    3. 以后您很有可能在更复杂的函数中导致错误(例如 NSE 函数会非常不可预测);
    4. 这是做非常愚蠢的事情的好方法:

    喜欢

    > `+` <- `-`
    > 1 + 1
    [1] 0
    

    规则的存在是有原因的。除非你有充分的理由破坏它们,否则不要这样做。


    附录

    如果您只想将符号表达式用作字符串,encodeStringformat 都很有用:

    > encodeString('σ²')
    [1] "σ²"
    > format('σ²')
    [1] "σ²"
    

    查看他们的帮助页面了解更多细节,但通常可以在字符串中使用任何符号(甚至是表情符号!),如果您稍微小心将其传递给哪些函数。

    ???????

    【讨论】:

    • (3) 和 (4) 都不能令我信服:我认为 (3) 完全是错误的:NSE 像对待其他任何变量一样对待这些变量。如果 NSE 函数调用 deparse 不正确(出于向后兼容性的原因,它的参数 backtick 对于大多数表达式默认为 FALSE,但它必须设置为 TRUE )。 (4) …我真的不明白这与 Unicode 变量名有什么关系。无论如何,您都可以重新定义运算符和其他函数。
    • @KonradRudolph 对于(4),当然,你需要足够聪明才能不做这样的事情。但是,对于 (3),它可能不是 NSE(可以以不同的方式实现),但即使 data.frame 将名称 σ² 标准化为 σ.,如果你不看(不太可能,授予)会导致下游错误。
    • 您可以通过指定check.names = FALSE 来修复data.frame 的行为。人们通常更喜欢data.frame 的默认行为是不好的,这就是为什么现代替代品(例如dplyr::data_frame)的做法不同。你是对的,尽管谨慎是必要的。
    【解决方案2】:

    我使用的是 Windows,所以这可能不适用于 Mac。以下代码允许我使用上标。

        > assign("σ²", 3)
        > σ²
        [1] 3
    

    希望这会有所帮助:)

    【讨论】:

    • 这段代码绝对不可移植。 Windows 上的 R 字符编码非常混乱。
    猜你喜欢
    • 2020-03-19
    • 2010-12-26
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多