在R中定义函数内部函数的好方法

ena*_*naJ 10 r function

在R中,当想要在另一个函数中使用一个/多个函数时,可能有两种方法.示例函数可以是:

方法1:

make.power <- function(n) {
 pow <- function(x) {
 x^n
 }
 pow
}
Run Code Online (Sandbox Code Playgroud)

方法2:

make.power <- function(n) {
     pow(n)
    }

pow <- function(x) {
     x^n
     }
Run Code Online (Sandbox Code Playgroud)

在我看来(但我不确定),第二种方法是一种更好的方法,如果你有很多子功能.

我的问题是: 1)这两种方式之间是否存在功能差异?例如,函数如何传递变量,或者子函数与父函数之间的关系等.

2)对于R,哪一个可能是优选的(可能更有计算效率或结构清晰)?

Señ*_*r O 5

如果你问的是你给出的具体例子,这个问题对我来说似乎不太宽泛.

这里的主要区别是评估n.对于例如1,被返回的功能将主要有硬编码n值.

> n = 100
> f1 = make.power(2)
> f1(2)
[1] 4
> n = 1
> f1(2)
[1] 4
Run Code Online (Sandbox Code Playgroud)

示例2不会,而是依赖于全局定义n.

> n = 1
> make.power2(2)
[1] 2
> n = 100
> make.power2(2)
[1] 1.267651e+30
Run Code Online (Sandbox Code Playgroud)

随着功能变得越来越复杂,范围问题也将变得越来越复杂.David Robinson在评论中提供的链接是一个很好的资源.