我目前正在处理一个软件包,比方说它叫做myPack。 我有一个名为myFunc1的函数和另一个名为myFunc2的函数,它看起来像这样:
myFunc2 <- function(x, parallel = FALSE) {
if(parallel) future::plan(future::multiprocess)
values <- furrr::future_map(x, myFunc1)
values
}
现在,如果在非并行状态下调用myFunc2,它将起作用。但是,如果我用parallel = TRUE调用它,则会出现以下错误:
Error: Unexpected result (of class ‘snow-try-error’ != ‘FutureResult’)
retrieved for MultisessionFuture future (label = ‘<none>’, expression =
‘{; do.call(function(...) {; ...future.f.env <- environment(...future.f);
if (!is.null(...future.f.env$`~`)) {; if
(is_bad_rlang_tilde(...future.f.env$`~`)) {; ...future.f.env$`~` <-
base::`~`; ...; }); }, args = future.call.arguments); }’): there is no
package called 'myPack'. This suggests that the communication with
MultisessionFuture worker (‘SOCKnode’ #1) is out of sync.
有人知道为什么myFunc2在顺序模式下而不是在并行模式下工作以及如何防止出现此错误吗?
可复制的示例:
linear_model_1 <- lm(mpg ~ cyl + disp + hp, data = mtcars)
linear_model_2 <- lm(mpg ~ cyl + poly(disp, 2), data = mtcars)
x <- list(linear_model_1, linear_model_2)
myFunc1 <- function(model, seed, size) {
`%>%` <- purrr::`%>%`
set.seed(seed)
draws <- rep(size, 10) %>%
furrr::future_map(sample, x = fitted(model), replace = TRUE)
mean(unlist(draws))
}
(注意:这不是全部功能,但基本上是简化版本中的功能)
答案 0 :(得分:0)
我在这里也有同样的情况。您必须使用devtools:install()至少安装一次软件包。在此问题中对此进行了记录:https://github.com/DavisVaughan/furrr/issues/95