2012-12-07 36 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

我在说,如果在全球环境中定义了所有功能,它会不会奏效? –

相关问题