在函数的封闭环境中修改许多对象

时间:2015-05-12 14:28:52

标签: r function

通常在R中,函数首先创建一个新环境并在其中完成其内容。我想有一个函数来定义/重新初始化函数的父环境可访问的大量内容。

我知道我可以使用<<-运算符来表示特定变量,但在这里我有很多的函数,变量,甚至是已定义的环境,我希望能够选择函数中的参数是否使用父环境。

目前,我正在调用该函数,然后根据需要附加它的环境,如下所示:

init <- function(){
    things <- 0
    ICI <<- environment()
    success <- TRUE
    return(success)
}
init();attach(ICI)

它工作正常,但是他们可以将函数的当前环境更改为父环境,以便我可以定义函数的参数来打开或关闭此行为吗?

1 个答案:

答案 0 :(得分:0)

实际上可以在函数中调用attach,并且在返回父环境时不会销毁附件,因此以下内容允许在父环境中设置所有内容:

init <- function(transparent=FALSE){
    # compute values
    things <- 0
    success <- TRUE

    # follow "set back variables" argument
    ICI <- environment()
    if(transparent){
        attach(ICI) # everything is transmitted to the parent environment
    }else{
        ICI <<- ICI # only transmit a handle for the environment
    }
    return(success)
}
init();# attach(ICI)