在 R 中更改包函数的环境

问题描述 投票:0回答:0

我有一种情况,我有一个函数,我想改变它的环境。此函数在本地自定义 R 包中。

这是我的设置。我有一个名为

testpkg
的 R 包项目,在 /R 中有一个名为
do_stuff.R
的函数:

#' A function that clearly does stuff
#' @export
do_stuff <- function() {
  Sys.sleep(1)
  "Done"
}

在交互式脚本中,我试图将此功能分配给另一个环境。我想使用

assign
函数,以便以编程方式执行此操作。这是我一直在尝试的:

devtools::load_all()
env <- new.env()
assign("do_stuff", do_stuff, env)

# See if it worked (nope, environment is namespace:testpkg)
> env$do_stuff
# function() {
#   Sys.sleep(1)
#   "Done"
# }
# <environment: namespace:testpkg>

如果我使用

environment()<-
它似乎确实有效:

devtools::load_all()
environment(do_stuff) <- new.env()

# See if it worked (yes, environment is different)
> do_stuff
#function() {
#  Sys.sleep(1)
#  "Done"
# }
# <environment: 0x7f9d1c3a8fd8>

但这并不理想,因为我需要它以编程方式工作。我意识到这似乎是一件很奇怪的事情。本质上,我需要使我的自定义函数可移植以使用

future
包进行异步处理,但这不是重点。

r r-package r-environment
© www.soinside.com 2019 - 2024. All rights reserved.