gpt4 book ai didi

r - 在 R 中绑定(bind)外部变量

转载 作者:行者123 更新时间:2023-12-04 14:40:26 24 4
gpt4 key购买 nike

假设我有以下功能:

g = function(x) x+h

现在,如果我的环境中有一个名为 h 的对象,我不会有任何问题:
h = 4
g(2)

## should be 6

现在,我有另一个功能:
f = function() {
h = 3
g(2)
}

我希望:
rm(h)
f()

## should be 5, isn't it?

相反,我得到一个错误
## Error in g(2) : object 'h' not found

我希望 gf 的环境中进行评估,因此 hf将绑定(bind)到 g 中的 h,就像我执行 g 时一样在 .GlobalEnv 内.这不会发生(显然)。任何解释为什么?如何克服这个问题,以便使用封闭环境评估函数中的函数(例如 g )?

最佳答案

函数的封闭环境与其(父)评估框架之间存在差异。

定义函数时设置封闭环境。如果你定义你的函数 g在 R 提示符下:

g = function(x) x+h

然后是 g的封闭环境将是全局环境。现在,如果您调用 g从另一个函数:
f = function() {
h = 3
g(2)
}

父评估框架是 f的环境。但这不会改变 g的封闭环境,这是一个不依赖于评估位置的固定属性。这就是为什么它不会获取 h 的值的原因。在 f 中定义.

如果你想要 g使用 h 的值在 f 中定义, 那么你也应该定义 gf 内:
f = function() {
h = 3
g = function(x) x+h
g(2)
}

现在 g的封闭环境将是 f的环境(但请注意,此 g 与您之前在 R 提示符下创建的 g 不同)。

或者,您可以修改 g 的封闭环境如下:
f = function() {
h = 3
environment(g) <- environment()
g(2)
}

关于r - 在 R 中绑定(bind)外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42059004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com