R 编程功能

问题描述 投票:0回答:3

我正在学习 R 编程。我无法理解 R 中函数中的函数如何工作。示例:

f <- function(y) {
    function()  { y }
}

f()
f(2)()

我无法理解为什么 $f() 不起作用并显示以下消息:

function()  { y }
<environment: 0x0000000015e8d470>

但是当我使用 $f(4)() 时,它显示的答案为 4。 请简单解释一下您的答案,以便我更容易理解。

r function functional-programming
3个回答
0
投票

对于更一般的情况,让我们稍微改变一下“内部”函数:

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

0
投票

原因是内部函数通过执行

f()
就相当于外部函数的答案,结果是一个函数。最好的方法是称其为 double
f(3)()
,因为内部函数不接受任何参数。


0
投票

函数 $f() 已定义,以下是您尝试调用它的方法:

$f() { y }:这定义了一个名为 $f 的函数,它只输出变量 $y。但是,由于 $y 未在函数范围内定义,因此它可能为空或未定义。

$f(4)():这是一个嵌套函数调用。

$f(4):这部分调用将参数 4 传递给函数 $f。 () 结尾:这尝试执行 $f(4) 的输出。

© www.soinside.com 2019 - 2024. All rights reserved.