Редактировать: проблема решена в optimParallel версии 0.7-4
Версия доступна на CRAN: https://CRAN.R -project.org / package = optimParallel
Для более старых версий:
Как подробно описано в , в этом посте optimParallel()
нужно немного обмануть, чтобы не было ограничений на имена аргументов, которые можно передавать через ...
аргумент.В настоящее время это означает, что функция, переданная в optimParallel()
, должна быть определена в .GlobalEnv
, чтобы правильно найти скомпилированный код.
Следовательно, можно обойти эту проблему, чтобы определить функцию в .GlobalEnv
:
library(optimParallel)
library(EffES) # EffES is your own package
cl <- makeCluster(detectCores()-1)
clusterEvalQ(cl, library(EffES))
setDefaultCluster(cl=cl)
f <- function(par, y, x) {
profileLLcpp(par=par, x=x, y=y)
}
optimParallel(par=rep(0.001,3), f=f, y=y.test, x=x.test,
lower = rep(0.001,3), method = "L-BFGS-B")$par
Предложения по улучшению кода optimParallel () приветствуются.Я открыл соответствующий вопрос здесь .