2013-03-19 17 views
2

真相被告知,我在這裏只是懶惰,但也許有人可能有一天會從這裏回答中獲利。何時解釋默認參數中的parent.frame/how/where?

說我定義的功能等:

fn<-function(envir=parent.frame()) 
{ 
    #do something with envir 
} 

我的問題是:什麼可能我期望能夠ENVIR的內容?

上下文:我有一個相當長的函數f1,其中包含對parent.frame的調用。現在,我想將該函數的一部分(包含parent.frame調用)提取到一個新的輔助函數f2中(然後由f1調用它),並且我想確保f1和前面一樣。

回答

2

默認參數評估within the evaluation frame of the function call,從哪個位置parent.frame()是調用環境。 envir的值將因此成爲調用fn的環境的指針。

而且,只是嘗試一下,看看自己:

debug(fn) 
fn() 
# debugging in: fn() 
# debug at #2: { 
# } 
Browse[2]> envir 
# <environment: R_GlobalEnv> 
+1

尼斯的答案,但我不認爲評估框架是明確界定 - 我認爲當地環境更爲清晰。 – hadley 2013-03-19 20:50:07

+0

@hadley - 不錯的建議,謝謝。將來,我可能會選擇那個或「當前評估的環境」。 – 2013-03-19 22:42:21

+1

謝謝。很有意思。所以這意味着在這種情況下調用$ fn(parent.frame())$和$ fn()$會有相當大的區別,對吧? – 2013-03-20 08:51:09