R:如何使用 assign() 复制 <<- 赋值?



我需要在函数中分配一个变量,该变量的名称是函数的参数,我需要稍后在函数外部访问它。我认为<<-在另一种情况下会这样做,但由于变量的名称是动态的,我认为我需要assign()

我现在有什么

assignVar = function(varname) {
     assign(varname,"blabla")
}
assignVar("foo")
foo

返回通常的CCD_ 3。

assign功能或任何其他秘密武器有什么选择吗?我看过文档,但我仍然对环境感到非常困惑。。。(R初学者)。

在使用<<-之前了解它的行为非常重要。一旦了解了该行为,您还会注意到,您无法使用assign来实现其行为(至少不太容易)。这里有一个简单的例子:

a <- 1
f1 <- function(){
    a <<- 2
    NULL
}
f1()
a
# [1] 2
a <- 1
f2 <- function(){
    a <- 2
    f3 <- function(){
        a <<- 3
    }
    f3()
    NULL
}
f2()
a
# [1] 1

如果可能的话,<<-通过分配到父环境中来工作。如果那里没有现有的a对象(在本例中),它会上升到另一个级别并重复此操作,直到到达全局环境,如果没有其他较低的环境工作,它最终会在全局环境中进行分配。因此,在上面的例子中,f1()导致全局环境的改变,而f2()没有。如果您注释掉f2a<-2行,则全局环境确实发生了变化。

要使用assign实现相同的行为,您需要编写一个更复杂的函数,该函数在父环境中循环,直到到达全局环境。无论如何,通常不鼓励让函数产生副作用(因为通常会给代码带来不必要的复杂性,尤其是当这些副作用发生在全局环境中时)。

我强烈建议您不要这样做:

assignVar = function(varname, envir = globalenv()) {
  assign(varname, "blabla", envir=envir)
  invisible(NULL)
}
assignVar("foo", envir=globalenv())
foo
[1] "blabla"

相关内容

  • 没有找到相关文章