2012-12-07 63 views

回答

1

您可以創建一個功能關閉:

##I've removed the brackets and return to shorten the function 
func1 = function(a) { 
    func2 = function(a) a+2 
    func3 = function(a) a+3 
    return(list(func2=func2, func3=func3)) 
} 

您可以使用關閉共享變量:

func1 = function(a) { 
    a = a 
    func2 = function() a + 2 
    func3 = function() a + 3 
    return(list(func2=func2, func3=func3)) 
} 

f = func1(50) 
f$func2() 
f$func3() 
0

沒有你不能。

func2在func1的範圍內定義。

但這個問題真的很含糊!任何淨功能都可以訪問全局範圍。

a <- 10 
function <- f(x){ 
    g <- function(y=x) x+a 
    g(x) 
} 

這裏函數g是嵌套的並且有一個自由變量a。 解釋器在g和f的範圍內工作,接下來尋找f(全局)框架中的a的值。

爲什麼要將嵌套函數定義爲嵌套,如果要將其作爲全局訪問?

+0

如果在全局環境中創建了所有函數(假設所有參數都相應地排成一行),它會不會起作用? –

+0

相應地排隊?我不明白這裏的英文:)。但是這裏的func2並沒有在全球環境中定義。 – agstudy

+0

我在說,如果在全球環境中定義了所有功能,它會不會奏效? –

相關問題