问题描述
我想使用furrr
软件包而不是purrr
软件包并行运行以下函数。
library(furrr)
library(tidyverse)
input <- list(element1 = tibble::tibble(a = c(1,2),b = c(2,2)),element2 = tibble::tibble(a = c(1,b = c(4,4))
)
multiplier <- function(data,var1,var2){
purrr::map_df(.x = data,.f = ~ .x %>%
dplyr::mutate(product = {{var1}} * {{var2}})
)
}
multiplier(input,a,b)
但是,当我将其转换为等效的furrr
时,会出现错误。
multiplier_parallel <- function(data,var2){
furrr::future_map_dfr(.x = data,.f = ~ .x %>%
dplyr::mutate(product = {{var1}} * {{var2}})
)
}
future::plan(multiprocess)
multiplier_parallel(input,b)
Error in get(name,envir = env,inherits = FALSE) :
Identified global objects via static code inspection (structure(function (...,.x = ..1,.y = ..2,. =
..1); .x %>% dplyr::mutate(product = {; {; var1; }; } * {; {; var2; }; }),class =
c("rlang_lambda_function","function"))). Object 'a' not found
我认为原因是future
包寻找所有必需的变量以导出到工作程序。在这种情况下,它正在寻找列名“ a”作为全局变量,但找不到它,因此出错。
当我只是将变量名插入到调用中时,它可以工作,但是现在该函数不再适用于任何变量名:
multiplier_parallel <- function(data,.f = ~ .x %>%
dplyr::mutate(product = a * b)
)
}
multiplier_parallel(input,b)
到目前为止,我已经尝试了几种方法,包括为.future_options提供名称,但是似乎都没有用。有什么办法可以使这项工作吗?我的实际功能要复杂得多,但是我假设原理是相同的。如果有人可以帮助,那就太好了!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)