C 如何干扰并行 R 并且可以解决它吗?

问题描述

我正在尝试在 R 中使用 %dopar% 运行 foreach 循环。 但是,我注意到 .C()一个由我循环中的另一个函数调用函数,给出了以下错误消息:

Error in { : task 1 Failed - "C symbol name "C_SOM" not in load table"

不并行运行似乎工作正常,只需将 %dopar% 更改为 %do% 即可“修复”问题,因为它不会导致错误消息,但是我需要它运行稍后在 HPC 上并行。

我正在尝试分析在某个管道中更改 5 个不同参数的效果。我已经制作了包含我想尝试的不同值的列表:

list_1 <- c(1,2,3)
list_2 <- c(10,20,30)

等等。

我的 foreach 设置如下:

ncores <- detectCores()
cl <- makeCluster(ncores)
registerDoParallel()
foreach(a = list_1,.combine = "rbind") %:%
    foreach(b = list_2,.combine = "rbind") %:%
    ...
    foreach(e = list_5,.combine = "rbind",.verbose = T) %dopar% {
test(a,b,c,d,e) } -> output
stopCluster(cl)

我不确定,但它似乎只在某个时候给出错误。使用 496 种参数选项组合,控制台将显示

Console output

.C() 有/没有并行处理有区别吗?有没有办法让它也与 %dopar% 一起工作?

尝试回答 r2evans 的问题: 我获取了包含在我循环遍历的 test() 函数中使用的函数文件。这些函数调用之一使用 .C() 函数。我猜 foreach 创建的会话都使用 .C() 函数,因为它是循环内调用函数的一部分。如果我误解了您的问题,我很抱歉,我对此很陌生。

如果我能提供更多信息以更轻松地解决此问题,请告诉我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)