[英]Environment/scoping in furrr: nesting get() in future_map()
我有兴趣了解更多有关furrr
如何从全球环境中查找内容的信息,并大致询问了它执行的黑魔法。 这是一个我不理解的行为的具体示例,可以使用一些帮助:我需要在future_map
调用或get
调用中更改什么以返回"C"
和"F"
?
# load furrr, describe "plan"
library(furrr)
nc<-2
plan(strategy = multiprocess, workers = nc)
# create objects
a<-list("A", "B", "C")
b<-list("D", "E", "F")
#works fine
future_map(1:5, function(foo){
map(c("a", "b"), function(my_object_name){
bar<-my_object_name
print(bar)
})
})
# object 'a' not found
future_map(1:5, function(foo){
map(c("a", "b"), function(my_object_name){
bar<-get(my_object_name)[[3]]
print(bar)
})
})
编辑
这个问题似乎无法在所有系统上重现,可能与我安装的furrr.
尽管软件包给出了关于多核计划的警告,但这是multiprocess
和multisession
的问题,但不是plan(strategy=multicore,...
.
正是envir
造成了问题。 将envir
指定为全局环境以查找该对象并print
library(furrr)
future_map(1:5, function(foo){
map(c("a", "b"), function(my_object_name){
bar <- get(my_object_name, envir = .GlobalEnv)[[3]]
print(bar)
})
})
#[1] "C"
#[1] "F"
#[1] "C"
#[1] "F"
#[1] "C"
#[1] "F"
#[1] "C"
#[1] "F"
#[1] "C"
#[1] "F"
#[[1]]
#[[1]][[1]]
#[1] "C"
#[[1]][[2]]
#[1] "F"
#...
我想我在带有文档化解决方法的future
包中遇到了一些已知的奇怪行为。 请参阅未来文档中的小插图。
要将变量添加到导出的全局变量,请在future
使用globals
参数,它将furrr
为, .options = future_options(globals(structure=T, add="missing_object"
我怀疑这可能也是我的问题之一:
...发生上述错误的原因是,与主 R 进程相反,评估
future
表达式的 R 工作人员没有加载data.table
。 相反,评估返回到 [.data.frame 方法,这不是我们想要的。在未来的框架设法将
data.table
识别为所需的包(这是目标)之前,我们可以通过指定所需的其他包来指导未来......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.