微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。