簡體   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