[英]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.
盡管軟件包給出了關於多核計划的警告,但這是multiprocess
和multisession
的問題,但不是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.