我有兴趣了解更多关于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,...。
发布于 2020-03-22 15:24:14
我想我在future包中遇到了一些已知的奇怪行为,这些行为都有记录在案的解决方案。见在未来的文件中。
若要向导出的全局变量添加变量,请使用future中的future参数,该参数在furrr中转换为, .options = future_options(globals(structure=T, add="missing_object"
我怀疑这也是我的问题之一:
发生上述错误的原因是,与主R进程相反,计算...The表达式的R工作者没有加载
data.table。相反,评估返回到[.data.frame方法,这不是我们想要的。 在未来的框架设法将data.table标识为所需的包(这是目标)之前,我们可以通过指定所需的附加包来指导未来。
发布于 2020-03-21 18:23:40
是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"
#...https://stackoverflow.com/questions/60791630
复制相似问题