【发布时间】:2019-04-05 09:08:59
【问题描述】:
我注意到我可以使用一些希腊字母作为名称,而其他字母要么是非法的,要么只是拉丁字母的别名。
基本上我可以使用β或µ(虽然β在打印时更改为ß,ß和β充当别名)
list(β = 1)
# $ß
# [1] 1
list(μ = 1)
# $µ
# [1] 1
α, Γ, δ, ε, Θ, π, Σ, σ, τ, Φ, φ 和 Ω 是允许的,但作为拉丁字母的别名。
list(α = 1)
# $a
# [1] 1
αa <- 42
aa
# [1] 42
GG <- 33
ΓΓ
# [1] 33
我测试过的其他字母“不起作用”:
ι <- 1
# Error: unexpected input in "\"
Λ <- 1
# Error: unexpected input in "\"
λ <- 1
#Error: unexpected input in "\"
我对@987654332@ 感到惊讶,因为它是由包wrapr 的define_lambda 定义的,所以我认为这取决于系统。
我知道相似或相同的字符可以有不同的编码,其中一些不能很好地在应用程序之间复制/粘贴,这个问题的代码在粘贴回 RStudio 时返回描述的输出。
?make.names 说:
语法上有效的名称由字母、数字和点或 下划线字符并以字母或不跟随的点开头 一个数字
所以问题的一部分是:什么是字母?以及这里发生了什么?
更具体地说:
- 是否有希腊字符可以在所有 R 安装中安全使用,尤其是
µ和β(或ß)可以安全地在包中使用。 - 为什么
λ(intToUtf8(955)) 在我的系统上不可用,而wrapr的用户似乎常用它。 - 是否有其他非拉丁字母(希腊或非希腊字母)可以安全地用于我的代码中? (例如,挪威语
ø看起来很酷,似乎可以在我的系统上运行)
这一切都是因为我正在寻找一个不会与现有或常用名称冲突的一个(或两个)字符函数名称,并且看起来有点时髦。 . 已经用过很多次了,我也用过..。
来自sessionInfo():
R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C LC_TIME=English_United Kingdom.1252
【问题讨论】:
-
编码地狱。
assign("λ", 1); assign("α", 1); ls(); enc2native("λ"); enc2native("α"); enc2native("Γ") -
这显然有效:
assign("λ", 5); get("<U+03BB>"),但不是assign("λ", 5); print(λ)。有趣的发现这个问题。还有这个:assign("λ", 5); `<U+03BB>`有效。 -
我想
assign("λ", 5); print(λ)在您的本机编码为 utf-8 时有效:enc2utf8("λ") -
ü, ä, ö, ß 在我的系统上运行良好,但这可能取决于区域设置。即使是德国人也不会自然而然地使用
ß作为变量名,所以这可能会很好。 -
FWIW,我在 Ubuntu 上,没有收到任何错误/别名,也无法重现任何内容。
标签: r character-encoding