R中的变量名限制

R中的变量名限制,r,r-faq,R,R Faq,对于R中的变量名可以使用哪些字符(可能还有其他限制),有哪些限制 (这是一般性的参考,但我似乎找不到答案)您可能在?make.names中寻找讨论: 语法上有效的名称由字母、数字和点或符号组成 在字符下面划线,并以字母或未后跟的点开头 一个数字。诸如“.2way”之类的名称无效,并且 保留字 在帮助文件本身中,有一个指向保留字列表的链接,这些保留字是: 否则,在下一个中断中重复while函数 TRUE FALSE NULL Inf NaN NA_整数NA_实NA_复数_ 纳乌性格_ 评论中的许多

对于R中的变量名可以使用哪些字符(可能还有其他限制),有哪些限制


(这是一般性的参考,但我似乎找不到答案)

您可能在
?make.names
中寻找讨论:

语法上有效的名称由字母、数字和点或符号组成 在字符下面划线,并以字母或未后跟的点开头 一个数字。诸如“.2way”之类的名称无效,并且 保留字

在帮助文件本身中,有一个指向保留字列表的链接,这些保留字是:

否则,在下一个中断中重复while函数

TRUE FALSE NULL Inf NaN NA_整数NA_实NA_复数_ 纳乌性格_


评论中的许多其他好的注释包括James to提出的解决这个问题的观点,以及Josh指向一个相关SO的指针,该SO用于检查语法有效的名称。

几乎没有!您可以使用“赋值”来生成可笑的变量名:

assign("1",99)
ls()
# [1] "1"
是的,这是一个叫做“1”的变量。数字1。幸运的是,它不会改变整数1的值,您必须稍微努力才能得到它的值:

1
# [1] 1
get("1")
# [1] 99

有些人可能提到的“语法限制”纯粹是由解析器强加的。基本上,几乎没有什么东西不能称为R对象。你只是不能通过“来解决这个问题。下面的内容可能不会直接回答你的问题,但会对你有很大帮助。 尝试使用
exists()
命令查看是否已经存在某些内容,这样您就知道不应该为变量或函数使用系统名称。 例如

   > exists('for')
   [1] TRUE

   >exists('myvariable')
   [1] FALSE
使用内置基本包中的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)
}

是否有效\u nameR常见问题解答7.14:您可能也对此处的讨论感兴趣:您应该在
的帮助页中找到指向
?make.names
的链接,该链接用于
read.table
。我一直难以记住的帮助页面是描述允许转义字符的页面,答案是
?Quotes
。R简介,请注意,如果您引用变量名,您可以使用任何东西,例如``TRUE`。当然,我的问题是我在谷歌上搜索反向(“限制”)或者基本上是无效字符,当我应该搜索有效字符时。另外,点本身也是有效的<代码>=3.打印(.)
以点开头的名字是什么意思?我在R软件包中见过很多。@skan这样做通常是为了避免与变量的通用名称、数据帧的列或传递给不同方法或其他函数的其他参数发生名称冲突。我相信这句话是“足够让自己挂起来的绳子”:-P?assign:“对‘name’没有任何限制:它可以是非语法名称(请参阅‘make.names’)。”。这当然是一个谎言:c=paste(rep(字母,10000),collapse=“”);assign(c,123)生成:assign(c,123)中的错误:变量名限制为10000bytes@joran--从
?name
,“名称限制为10000字节(在2.13.0之前的R版本中是256字节)。“,所以你至少有一个限制!@joran你可以开始慢慢进入疯狂状态:
assign(“get”,ls)
你不需要
get()
,倒勾引用这个名字就可以了:`
1``我不明白为什么这个答案被否决了,对我来说,它无论如何都是一条有用的信息。