使用Furrr进行整洁的评估

问题描述

我想使用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 (将#修改为@)