Environment/scoping 在 furrr 中:在 future_map() 中嵌套 get()
Environment/scoping in furrr: nesting get() in future_map()
我有兴趣了解更多关于 furrr
如何从全球环境中找到东西的信息,并一般询问它的 性能。这是我不理解的行为的具体示例,可以使用一些帮助:在 future_map
调用或 get
对 return 的调用中,我需要更改什么"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
包中遇到了一些已知的奇怪行为,并记录了解决方法。参见 vignette in future documentation。
要将变量添加到导出的全局变量,请使用 future
中的 globals
参数,它将 furrr
转换为 , .options = future_options(globals(structure=T, add="missing_object"
我怀疑这可能也是我的问题之一:
...The above error occurs because, contrary to the master R process,
the R worker that evaluated the future
expression does not have
data.table
loaded. Instead the evaluation falls back to the
[.data.frame method, which is not what we want.
Until the future framework manages to identify data.table
as a
required package (which is the goal), we can guide future by
specifying additional packages needed...
我有兴趣了解更多关于 furrr
如何从全球环境中找到东西的信息,并一般询问它的 future_map
调用或 get
对 return 的调用中,我需要更改什么"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
包中遇到了一些已知的奇怪行为,并记录了解决方法。参见 vignette in future documentation。
要将变量添加到导出的全局变量,请使用 future
中的 globals
参数,它将 furrr
转换为 , .options = future_options(globals(structure=T, add="missing_object"
我怀疑这可能也是我的问题之一:
...The above error occurs because, contrary to the master R process, the R worker that evaluated the
future
expression does not havedata.table
loaded. Instead the evaluation falls back to the [.data.frame method, which is not what we want.Until the future framework manages to identify
data.table
as a required package (which is the goal), we can guide future by specifying additional packages needed...