2015-05-12 67 views
0

通常在R函數中,首先創建一個新環境並在其中執行其內容。我想有一個函數來定義/重新初始化一個函數的父級環境可以訪問的很多東西。在封閉函數的環境中修改許多對象

我知道我可以使用<<-運營商特定的變量,但在這裏我有的函數,變量,甚至被定義,我想有一個參數選擇的功能,使用環境,很多父母的環境與否。

目前,我打電話的功能,然後安裝,如果需要如下它的環境:

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

它工作正常,但他們的方式來改變功能的當前環境是父環境這樣我可以定義一個開啓或關閉此行爲的功能參數?

+0

'environment'和'父.env'都有setter,例如'environment(fun)< - value';儘管如此,手冊頁說這要小心。 –

+0

@Neal Fultz雖然不允許將當前環境設置爲父級環境。 'parent.env(ICI)< - ICI'誘導凍結(我想是無限遞歸)。 – cmbarbu

+0

'環境(ICI)< - parent.env(ICI)'也許? –

回答

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)