При выполнении мультисессионной работы future_lapply говорит, что пакет не существует, но при запуске plan(sequential) работает нормально

Когда я пытаюсь использовать future_applyс участием plan(multisession), он говорит, что пакет, который я пытаюсь использовать, не существует. Когда я использую plan(sequential)это работает нормально. Я также получаю ту же ошибку при использовании plan(callr).

Вот ошибка:

Error in loadNamespace(name): there is no package called 'fuzzyjoin'

Может ли кто-нибудь помочь мне найти решение или что здесь происходит не так?

Я не уверен, связано ли это с пакетом future.apply или пакетами future или globals, поскольку я знаю, что они также задействованы здесь.

Вот мой код, показывающий проблему:

      library(fuzzyjoin)
library(future.apply)
#> Loading required package: future
library(dplyr)
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tidyr)


iris_mod<- iris %>%
  mutate(examplefield= Sepal.Width + Petal.Length,
         Species = as.character(Species))


iristype <- iris_mod$Species %>% unique()

plan(sequential)

test_sequential <- future_lapply(iristype, 
                               FUN = function(x) {
                                 fuzzyjoin::fuzzy_left_join(
                                   iris_mod %>% filter(Species %in% x),
                                    iris_mod, 
                                    by = c("Species"="Species",
                                           "examplefield"="Sepal.Length"),
                                    match_fun = list(`==`, `<`)
                                 )},
                               future.chunk.size= 2
)


plan(multisession)

test_multisession <- future_lapply(iristype, 
                                   FUN = function(x) {
                                     fuzzyjoin::fuzzy_left_join(
                                       iris_mod %>% filter(Species %in% x),
                                        iris_mod, 
                                        by = c("Species"="Species",
                                               "examplefield"="Sepal.Length"),
                                        match_fun = list(`==`, `<`)
                                     )},
                                   future.chunk.size=2
)
#> Error in loadNamespace(name): there is no package called 'fuzzyjoin'

Создано 28 января 2022 г. пакетом reprex (v2.0.1)

Я использую R v4.0.3, если это актуально.

1 ответ

Я запустил следующий код и обнаружил, что пути к библиотеке по какой-то причине передаются неправильно. Мое грязное исправление заключалось в том, чтобы убедиться, что пакеты были установлены в libPath, где futureискал.

      install.packages("fuzzyjoin", lib= "C:/Program Files/R/R-4.0.3/library" )

Вот код, который я запустил, чтобы обнаружить, что мой обычный сеанс и сеанс future_lapply/future используют разные пути к библиотеке:

      .libPaths()
# [1] "\\\\networkfileservername/Userdata/myusername/Home/R/win-library/4.0" "C:/Program Files/R/R-4.0.3/library"    


f_libs%<-% .libPaths()
print(f_libs)
# [1] "C:/Program Files/R/R-4.0.3/library"     

Другие вопросы по тегам