【发布时间】:2016-02-15 10:27:43
【问题描述】:
这更多是出于好奇,但是否可以在 R 控制台中编写下标,如果可以,我该怎么做?
- 我使用的是 Mac 并且
- 通常在 RStudio 中编写代码
虽然赋值语句使用希腊字母,例如μ,σ,但我无法让上标或下标工作。我想写一个分配语句,例如σ² <- 1 并让它被识别。特别是,输入最后一个命令我收到以下错误消息
Error: unexpected input in "σ�"
【问题讨论】:
这更多是出于好奇,但是否可以在 R 控制台中编写下标,如果可以,我该怎么做?
虽然赋值语句使用希腊字母,例如μ,σ,但我无法让上标或下标工作。我想写一个分配语句,例如σ² <- 1 并让它被识别。特别是,输入最后一个命令我收到以下错误消息
Error: unexpected input in "σ�"
【问题讨论】:
你可以,但你不应该;不符合 R 标准的名称最终会导致问题。
规则,来自?Quotes:
名称和标识符
标识符由一系列字母、数字、句点 (.) 和下划线。它们不能以数字或下划线开头, 也不是句点后跟一个数字。保留字无效 标识符。
字母的定义取决于当前的语言环境,但仅限于 ASCII 数字被认为是数字。
此类标识符也称为句法名称,可以使用 直接在R代码中。几乎总是可以使用其他名称,前提是 他们被引用。首选引号是反引号 (`),并且 deparse 通常会使用它,但在许多情况下单或双 可以使用引号(因为字符常量通常会转换为 一个名字)。反引号可能必不可少的一个地方是分隔 公式中的变量名:见公式。
如果您仍然想打破规则,有几种方法。你可以使用assign:
> assign('σ²', 47)
> `σ²`
[1] 47
> σ²
Error: unexpected input in "σ�"
但是请注意,根据您的语言环境,您可能需要将 σ² 包含在反引号中才能成功调用它。
你也可以用反引号包裹它来赋值:
> `σ²` <- 47
> `σ²`
[1] 47
> σ²
Error: unexpected input in "σ�"
如您所见,您可能仍需要将所有调用包含在反引号中(尤其是如果您希望您的代码具有微弱的可移植性)。
也就是说,这完全是一个非常非常糟糕的想法。
喜欢
> `+` <- `-`
> 1 + 1
[1] 0
规则的存在是有原因的。除非你有充分的理由破坏它们,否则不要这样做。
如果您只想将符号表达式用作字符串,encodeString 和 format 都很有用:
> encodeString('σ²')
[1] "σ²"
> format('σ²')
[1] "σ²"
查看他们的帮助页面了解更多细节,但通常可以在字符串中使用任何符号(甚至是表情符号!),如果您稍微小心将其传递给哪些函数。
???????
【讨论】:
deparse 不正确(出于向后兼容性的原因,它的参数 backtick 对于大多数表达式默认为 FALSE,但它必须设置为 TRUE )。 (4) …我真的不明白这与 Unicode 变量名有什么关系。无论如何,您都可以重新定义运算符和其他函数。
data.frame 将名称 σ² 标准化为 σ.,如果你不看(不太可能,授予)会导致下游错误。
check.names = FALSE 来修复data.frame 的行为。人们通常更喜欢data.frame 的默认行为是不好的,这就是为什么现代替代品(例如dplyr::data_frame)的做法不同。你是对的,尽管谨慎是必要的。
我使用的是 Windows,所以这可能不适用于 Mac。以下代码允许我使用上标。
> assign("σ²", 3)
> σ²
[1] 3
希望这会有所帮助:)
【讨论】: