如何使用变量在R中命名另一个变量?

时间:2013-03-16 20:24:16

标签: r variables

我有一个使用readline的函数,允许用户输入他们想要为我们为他们创建的变量的名称。我们称之为“USER.DEFINED.VARIABLE”。它包含我想用于另一个变量的名称。假设“{。{1}}将”USER.DEFINED.VARIABLE“设置为”jimsfilename“。

我知道我可以使用:

为名为“jimsfilename”的变量赋值
readline

“jimsfilename”现在将包含assign(USER.DEFINED.VARIABLE,c(1,2,3,4,5)) 。但是,我现在如何对“jimsfilename”大惊小怪,因为我没有(在readline将其分配给USER.DEFINED.VARIABLE之前)知道它的名字是什么?

换句话说,假设我现在要为jimsfilename中的每个值添加1。我不能这样做:

1,2,3,4,5

因为“USER.DEFINED.VARIABLE”实际上是一个文本字符串名称。我想要引用jimsfilename,但我只有USER.DEFINED.VARIABLE来表示它。我确信这很容易......

3 个答案:

答案 0 :(得分:6)

这取决于您想要做什么,但这是使用get函数的示例:

x = 1
get("x") + 1
  

2

assign("name", get("x") + 1)
name
  

2

答案 1 :(得分:3)

为什么不用变量(使用自己的名称)对变量的本地副本进行所有操作(添加1或其他更改),然后在函数/脚本的末尾/分配或其他保存的任何内容?这比创建变量要简单得多,然后必须使用get获取副本,更改副本,再次assign

更好的方法是在函数内部使用自己的变量名,然后返回结果并让用户决定在该点命名的内容。这是更糟糕的做事方式,最好不要使用assign功能。使用assign可以使用列表和下标更简单地完成大多数事情。

函数不应该更改全局环境中的任何内容,只返回用户可能需要的任何值,并让用户进行赋值。

答案 2 :(得分:0)

您可以使用evalparse。后者将文本解释为控制台中的输入。第一个计算表达式(例如,由parse生成)。例如:

> varname <- "user.defined.variable"
> varvalue <- 42
> eval(parse(text=paste(varname, varvalue, sep=" <- ")), envir=.GlobalEnv)
> ls()
[1] "user.defined.variable" "varname"               "varvalue"             
> user.defined.variable
[1] 42

请注意,我选择全局环境作为新变量的目标。如果不是这种情况,您可以进行适当的更改。

要稍后引用新变量,您可以使用as.symbol。只需在分配新变量的环境下进行评估:

> eval(as.symbol(varname), envir=.GlobalEnv)
[1] 42

您还可以使用substitute创建eval可以理解的表达式:

> eval(substitute(x+1, list(x=as.symbol(varname))), envir=.GlobalEnv)
[1] 43

要更改新变量,只需创建作业表达式并对其进行评估:

> eval(substitute(x <- x*10, list(x=as.symbol(varname))), envir=.GlobalEnv)
> eval(as.symbol(varname), envir=.GlobalEnv)
[1] 420