При выполнении мультисессионной работы 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"