我有一种情况,我有一个函数,我想改变它的环境。此函数在本地自定义 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
包进行异步处理,但这不是重点。