我正在学习 R 编程。我无法理解 R 中函数中的函数如何工作。示例:
f <- function(y) {
function() { y }
}
f()
f(2)()
我无法理解为什么 $f() 不起作用并显示以下消息:
function() { y } <environment: 0x0000000015e8d470>
但是当我使用 $f(4)() 时,它显示的答案为 4。 请简单解释一下您的答案,以便我更容易理解。
对于更一般的情况,让我们稍微改变一下“内部”函数:
f <- function(y) {
function(x) { y + x}
}
现在
f(2)
返回一个将 2 添加到其参数的函数。值 2
保存在函数的环境中:
> f(2)
function(x) { y + x}
<environment: 0x0000000015a690f0>
> environment(f(2))$y
[1] 2
.. 如果您确实愿意,您可以更改它,但为此您需要为
f()
的输出指定一个名称:
> g <- f(2)
> environment(g)$y
[1] 2
> environment(g)$y <- 3
> g(1)
[1] 4
为什么这里需要
g
?因为否则,使用 f(2)
创建的环境会立即被垃圾收集,因此无法访问它:
> environment(f(2))$y<-4
Error in environment(f(2))$y <- 4 :
target of assignment expands to non-language object
当您仅使用一次
f(2)
时,这不会影响情况:
> f(2)(3)
[1] 5
原因是内部函数通过执行
f()
就相当于外部函数的答案,结果是一个函数。最好的方法是称其为 double f(3)()
,因为内部函数不接受任何参数。
函数 $f() 已定义,以下是您尝试调用它的方法:
$f() { y }:这定义了一个名为 $f 的函数,它只输出变量 $y。但是,由于 $y 未在函数范围内定义,因此它可能为空或未定义。
$f(4)():这是一个嵌套函数调用。
$f(4):这部分调用将参数 4 传递给函数 $f。 () 结尾:这尝试执行 $f(4) 的输出。