对R中的变量名可以使用哪些字符(以及其他限制)有什么限制?
(这是一般参考的尖叫,但我似乎无法找到答案)
答案 0 :(得分:34)
您可能正在寻找?make.names
的讨论:
语法上有效的名称由字母,数字和点或组成 下划线字符并以字母或点开头未跟随 一个数字。诸如“.2way”之类的名称无效,也不是 保留字。
在帮助文件本身中,有一个指向保留字列表的链接,其中包括:
如果在下一次休息时重复使用函数
TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character _
评论中的许多其他好的注释包括James对R FAQ解决此问题的观点以及Josh指向相关SO question的指针,该SO {{3}}处理检查语法上有效的名称。
答案 1 :(得分:22)
几乎没有!您可以使用'assign'来制作荒谬的变量名称:
assign("1",99)
ls()
# [1] "1"
是的,这是一个名为'1'的变量。数字1.幸运的是它不会改变整数1的值,你必须稍微努力才能得到它的值:
1
# [1] 1
get("1")
# [1] 99
有些人可能会提到的“语法限制”纯粹是由解析器强加的。从根本上说,你几乎无法调用R对象。你不能通过'< - '赋值运算符来完成它。 “get”会让你自由:)
答案 2 :(得分:5)
以下内容可能无法直接解决您的问题,但有很大帮助。
尝试使用exists()
命令查看是否存在某些内容,这样您就不应该使用系统名称来表示变量或函数。
实施例...
> exists('for')
[1] TRUE
>exists('myvariable')
[1] FALSE
答案 3 :(得分:1)
使用内置基础包中的make.names()函数可能有所帮助:
is_valid_name<- function(x)
{
length_condition = if(getRversion() < "2.13.0") 256L else 10000L
is_short_enough = nchar(x) <= length_condition
is_valid_name = (make.names(x) == x)
final_condition = is_short_enough && is_valid_name
return(final_condition)
}