R中的变量名称限制

时间:2012-02-08 14:56:12

标签: r r-faq

对R中的变量名可以使用哪些字符(以及其他限制)有什么限制?

(这是一般参考的尖叫,但我似乎无法找到答案)

4 个答案:

答案 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)
}