首页 > 解决方案 > 如何修复“doParallel 包的 foreach 循环的 NULL 问题”

问题描述

目前正在开发 Monolix 软件(用于估计数学模型参数的软件)。我目前正在使用该软件可用的 R 函数。它实现的效果与使用 UI 可能实现的效果完全相同。

要在 R 下运行函数,需要提交与我们要测试的模型相对应的文件。因此,我创建了 100 个 mlxtran 格式的文件,它们与模型设计完全相同,它们仅在要处理的数据集上有所不同。

起初我设法意识到,我对单个文件 mlxtran 的操作,它起作用了。然后,我通过一个 for 循环对列表中的 100 个文件执行分析,它成功了。当我必须通过 foreach 循环的 dopar 函数并行化我的代码时,问题就来了。


#Version that works
library(lixoftConnectors)
initializeLixoftConnectors(software = "monolix")
library(doParallel)
library(dplyr)

#Put my 100 mlxtran in a list
ldfRec <- dir(pattern = "*.mlxtran")

#Version fonctionnant avec un seul
loadProject(ldfRec[1])
runScenario()
ResultPopParameters<-getEstimatedPopulationParameters()
ResultPopParameters

#Version that does not work

cl <- detectCores() %>% -1 %>% makeCluster
registerDoParallel(cl)

#Put my 100 mlxtran in a list
ldfRec <- dir(pattern = "*.mlxtran")

resultatsForEach<-foreach(z=1:100, .packages=c("lixoftConnectors","dplyr","doParallel")) %dopar% {

  loadProject(ldfRec[z])
  runScenario()
  ResultPopParameters<-getEstimatedPopulationParameters()
  ResultsStandardErrors<-getEstimatedStandardErrors()
}
stopCluster(cl)

我期望我所有文件的输出。一次运行的结果是这样的:

ka_pop 1.56 V_pop 2.4 ....

这是一个包含我模型的每个参数的所有估计的列表。

现在,通过 foreach 循环,我有一个只有 NULL 值的 resultForEach 列表。

我为语法错误道歉,谢谢

标签: r

解决方案


推荐阅读