首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >furrr中的环境/作用域:在future_map()中嵌套get()

furrr中的环境/作用域:在future_map()中嵌套get()
EN

Stack Overflow用户
提问于 2020-03-21 18:20:00
回答 2查看 469关注 0票数 0

我有兴趣了解更多关于furrr如何从全局环境中找到东西的知识,并询问它执行的黑魔法一般情况。下面是一个我不理解并可能需要帮助的行为的具体示例:我需要在future_map调用或get调用中更改哪些内容来返回"C""F"

代码语言:javascript
复制
# 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,...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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标识为所需的包(这是目标)之前,我们可以通过指定所需的附加包来指导未来。

票数 0
EN

Stack Overflow用户

发布于 2020-03-21 18:23:40

envir造成了这个问题。指定envir作为全局环境来查找该对象和print

代码语言:javascript
复制
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"
#...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60791630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档