【发布时间】:2020-07-06 20:00:34
【问题描述】:
我在下面创建了两个在全局环境中定义的函数。您会注意到foo() 在bar() 中被调用,它们共享一个输入,即x。 :
bar <- function() {
x <- 2
foo()
}
foo <- function(x) {
x * 1000
}
在bar() 中调用foo() 时未明确定义x,这会导致以下代码出错:
bar()
我的问题是:有没有办法定义foo() 试图找到x 的环境?根据我的研究,foo() 正在全球环境中寻找x,但理想情况下它应该从bar() 的环境中获取x,其中x <- 2。
我知道以下方法可以解决问题,但这不是我正在开发的代码中的合理选择。关键是让foo()从bar()的环境中引用x的值:
bar <- function() {
x <- 2
foo(x = x)
}
foo <- function(x) {
x * 1000
}
bar()
【问题讨论】:
-
您可能需要指定环境
-
foo的封闭环境是全局环境,因此它将在那里寻找x。您可以在bar中定义foo -
@akrun 我将如何指定环境?这会使用 eval() 吗?
-
我不确定这个例子的所有测试用例。但是,如果你这样做
foo <- function() { x* 1000 }应该可以工作 -
删除
x作为函数参数对我不起作用。我收到错误object 'x' not found
标签: r