0

我有兴趣了解更多关于如何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.有关multiprocessmultisessionplan(strategy=multicore,...

4

2 回答 2

0

future我想我在带有记录的解决方法的包中遇到了一些已知的奇怪行为。请参阅未来文档中的小插图

要将变量添加到导出的全局变量,请使用globals参数 in future,它转换furrr, .options = future_options(globals(structure=T, add="missing_object"

我怀疑这也可能是我的问题之一:

...发生上述错误是因为,与主 R 进程相反,评估future表达式的 R 工作人员没有 data.table加载。相反,评估会退回到 [.data.frame 方法,这不是我们想要的。

在未来的框架设法将其识别data.table为所需的包(这是目标)之前,我们可以通过指定所需的额外包来指导未来......

于 2020-03-22T15:24:14.927 回答
0

正是它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"
#...
于 2020-03-21T18:23:40.907 回答