在 r 中传递变量的“名称”

Posted

技术标签:

【中文标题】在 r 中传递变量的“名称”【英文标题】:Pass the "name" of a variable in r 【发布时间】:2013-10-02 18:07:22 【问题描述】:

我想知道是否有办法在 R 中传递变量的“名称”。 我想要的是使以下功能更通用:

a <- "old"
test <- function () 
   assign("a", "new", envir = .GlobalEnv)

test()
a 

我不想要的是一个只有在我要更改的变量称为“a”时才有效的函数,所以我想知道我是否可以做一些事情,比如将变量名作为参数传递,然后调用赋值具有该名称的功能。像这样的:

a <- "old"
test <- function (varName) 
   assign(varName, "new", envir = .GlobalEnv)


test(a) #!!!!! Here !!!!!
a

感谢您的帮助。

【问题讨论】:

你的意思是 - test(varName = 'a') 您想将a 的值从old 重新分配给new,或者您想将new 的值分配给一个新变量old(如果是后者,你的功能是这样做的,前者是&lt;- 的用途......)?此外,如果您发现自己使用 assign,您几乎总是做错了。 实际上我真正想做的是将环境中的变量传递给函数,而不将环境分配给函数本身。像 myFunction(e1$myVar) 这样的函数 myfunction(theVar) 对“theVar”进行赋值并修改 myVar。但我无法让它工作。 我还是完全不明白你想要什么。请编辑您的问题以包括所需的输入和输出以及您要解决的更大问题的描述。我觉得有比处理assign 和传递环境更好的选择...... @Justin 我认为他正在寻找对assign 的修改,该修改需要一个变量,而不是一个字符。换句话说,我认为他正在寻找一个带有环境参数的&lt;- 的变体。 【参考方案1】:

如果您不想传递变量名(作为字符),您可以使用以下技巧:

test <- function (varName) 
  assign(deparse(substitute(varName)), "new", envir = .GlobalEnv)

【讨论】:

【参考方案2】:

将字符串 'a' 传递给您的函数将起作用。

a <- "old"
test <- function (varName) 
   assign(varName, "new", envir = .GlobalEnv)

test('a')
a
# [1] "new"

但是,正如我在 cmets 中所说,我认为这不是解决您问题的正确方法。如果您想就您正在尝试做的事情提出更一般的问题,我敢打赌有一个更“R-ish”的解决方案。

【讨论】:

以上是关于在 r 中传递变量的“名称”的主要内容,如果未能解决你的问题,请参考以下文章

将变量名称作为参数从外部函数传递到 R 中的内部函数时出现问题?

在 R/Shiny 中通过 selectInput() 传递变量名的问题

R:根据列表元素名称创建新的数据框变量

R将函数作为变量传入

Django URL 变量 - URL 中的企业名称而不是 ID

使用字符串变量在 R 函数中传递多个变量信息