繁体   English   中英

furrr 中的环境/范围:在 future_map() 中嵌套 get()

[英]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. 尽管软件包给出了关于多核计划的警告,但这是multiprocessmultisession的问题,但不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM