【问题标题】:Pass the "name" of a variable in r在 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;- 的变体。

标签: r variables pass-by-reference


【解决方案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”的解决方案。

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 2011-02-26
      • 2013-10-08
      • 1970-01-01
      • 2017-07-21
      相关资源
      最近更新 更多