首页 文章

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

提问于
浏览
3

我觉得这样做应该相当简单,但我不能为我的生活找到解决方案...我想在一个不同于它的环境中评估一个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 . 那么......有没有办法让我在 env 评估 f()

Edit: 我能够将 f() 发送到 env ,然后调用它,但这会永久地留下 f() . 对于上下文[见下文],我想与一些预加载的包并行调用该函数 .

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

2 回答

  • 4

    f 移至 env

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

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

    如果您不想更改 f 的环境,可以将以上所有内容放入新功能中 .

    fx <- function(f, env) {
        environment(f) <- env
        f()
    }
    fx(f, env)
    # [1] 4
    
  • 0

    source() 函数可能会有所帮助:

    source('scriptfilename.R')
    

    如果文件位于另一个路径中,则使用:

    source('YOURPATH/scriptfilename.R')
    

    当您运行 source() 时,它会将所有功能拉入当前环境 . 然后,您可以引用R脚本中包含的任何函数 .

    但是,我不建议在R项目文件夹结构之外引用函数/脚本,因为如果与其他人共享R项目文件夹,链接将会中断 .

相关问题