问题:
我需要一个只接受一个参数的函数,但需要访问其他一些变量。我不想将这些内容存储在.GlobalEnv
。
当前解决方案: 使用一个获取所有需要参数的函数,创建另一个适应环境的函数。
示例:
library(rlang)
foo <- function(a, b){
bar <- function(c){
out <- a + b + c
out
}
set_env(bar, get_env())
bar
}
bar <- foo(1, 2)
bar(3)
我坚信这种方法有缺点,但我不能指出这些缺点可能是什么。如果你能帮助我,我会很高兴。
答案 0 :(得分:1)
这没有什么不妥。你也不需要rlang:
foo <- function(a, b)
{
function(c) a + b + c
}
bar <- foo(1, 2)
bar(3)
foo
的返回值将是另一个函数,其环境是定义它的环境。这恰好是foo
的环境。
这可能是一个问题的唯一时间是foo
中是否有其他对象干扰事情的运作方式。为了防范这种情况,您可以明确创建一个与foo
环境不同的新环境:
foo <- function(a, b)
{
bar <- function(c) a + b + c
environment(bar) <- new.env(parent=globalenv())
bar
}
但是,如果有的话,这很少是必要的。