R指定功能环境

标签 r function call environment

我有一个关于R语言中的函数环境的问题。
我知道每次在R中调用一个函数时,都会有一个新环境E
创建在其中执行功能主体的位置。的父链接
E指向创建函数的环境。

我的问题:是否可以以某种方式指定环境E,即
提供应该执行功能的特定环境?

最佳答案

函数具有可以从函数外部更改的环境,但不能在函数本身内部更改。环境是函数的属性,可以使用environment()进行检索/设置。一个功能最多具有一个环境,但是您可以在不同的环境中复制该功能。

让我们用x的值设置一些环境。

x <- 0
a <- new.env(); a$x <- 5
b <- new.env(); b$x <- 10

以及一个使用环境中的foox函数
foo <- function(a) {
    a + x
}
foo(1)
# [1] 1

现在,我们可以编写一个帮助程序函数,可用于在任何环境下调用该函数。
with_env <- function(f, e=parent.frame()) {
    stopifnot(is.function(f))
    environment(f) <- e
    f
}

实际上,这将返回分配了不同环境的新函数(或者,如果未指定,则使用调用环境),我们可以通过传递参数来调用该函数。观察
with_env(foo, a)(1)
# [1] 6
with_env(foo, b)(1)
# [1] 11
foo(1)
# [1] 1

关于R指定功能环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12279076/

相关文章:

javascript - 在 Javascript 中绑定(bind)已绑定(bind)函数的更多参数

c++ - 延迟函数调用,如何传递参数?

c - 用随机数填充数组

在不声明函数指针的情况下将 void* 作为函数调用

compiler-construction - LLVM,通过引用调用

r - 在R的ggplot2中为geom_density制作图例

r - 使用 ggplot2 创建类似于 d3.js force layout 的气泡图

r - 使用 geom_text 组织 geom_point 上的文本

r - 如何在 R 中按列将一个 data.table 除以另一个 data.table?

javascript - 有没有办法确定 JavaScript 函数是否有副作用?