r - 在不同的环境中调用 R 函数

标签 r parallel-processing eval environment rlang

我觉得这样做应该相当简单,但我终生无法找到解决方案......我想在与它所在的环境不同的环境中评估 R 函数。

我想要什么:

# A simple function
f <- function() {
  x + 1
}

# Create an env and assign x <- 3
env <- new.env()
assign("x", 3, envir = env)

# Call f on env
call_on_env(f, env)
#> 4

我最接近“call_on_env()”的是:
# Quote call and evaluate
quo <- quote(f())
eval(quo, envir = env)

不幸的是,上面的代码返回一个错误:Error in f() : object 'x' not found .那么...有没有办法让我评估f()env ?

编辑:我可以发送 f()env然后调用它,但这会留下 f()永久在那里。对于上下文[见下文],我想与一些预加载的包并行调用该函数。

上下文:我正在与 parallel::clusterMap() 并行调用一个函数我希望在我的全局环境中加载的包也加载到集群上。据我所知,parallel::clusterExport()只能导出变量列表,所以它对我不起作用......

最佳答案

搬家 f进入 env

environment(f) <- env
f()
# [1] 4

注意:正如您在此处遇到的那样,在不同环境中评估对象是不可取的。最好将您计划相互交互的所有对象保留在同一环境中。

如果不想改变f的环境,您可以将上述所有内容放入一个新函数中。
fx <- function(f, env) {
    environment(f) <- env
    f()
}
fx(f, env)
# [1] 4

关于r - 在不同的环境中调用 R 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640961/

相关文章:

r - ggplot2:突出显示不连续性的背景

r - 有没有一种有效的方法来计算 R 中 sf 中多边形的所有成对交集(不使用 for 循环)?

python - 为什么以下简单的并行化代码比 Python 中的简单循环慢得多?

linux - 如何设置 OpenMP 以使用整个超线程进行并行处理?

javascript - 为什么 eval 不能访问 with 语句下的作用域变量?

r - 如何从 R 输出创建数据框

多核中的R caret nnet软件包

javascript - 用于命名 eval'ed javascript 的 token

Lisp:报价评估

r - 如何在 R 中的 ggplot2 中绘制混合效应模型估计值?