2

我有一个 R 代码,如下所示:

func1 = function(a) {

  func2 = function(a) {
    return(a+2)
  }

  func3 = function(a) {
    return(a+3)
  }
  return(a+func2(a))
}

我是否可以从 func1 外部调用 func2 或 func3?例如。我该如何运行:

x <- func2(10) #from the console?
4

2 回答 2

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()
于 2012-12-07T09:11:21.620 回答
0

不,你不能。

func2 定义在 func1 的范围内。

但是这个问题真的很模棱两可!任何 netsed 函数都可以访问全局范围。

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

这里函数 g 是嵌套的并且有一个自由变量 a。解释器 lokks 在 g 和 f 的范围内,然后在 f(全局)的局部框架中寻找 a 的值

如果要将嵌套函数作为全局访问,为什么要将嵌套函数定义为嵌套函数?

于 2012-12-07T09:12:21.737 回答