clusterExport、环境和功能范围

问题描述

我是 R 并行计算的新手,我正在使用并行库。我有几个当前位于全局环境中的函数一个名为 main_fun 的函数,它调用所有这些函数。但是我收到一个错误,即其他库中的某些函数未定义,尽管我在 clusterExport 中声明了这一事实

fun1 <- function(data,pob){
     pob_n <- ifelse(pob == 1,T,F)
     weights  <- parSapply(cl,1:nrow(pob_n),function(comb) data[pob_n[comb,],"wei"] %>% sum())
     punt <- parSapply(cl,"Pun"] %>% sum())
     result <- cbind(weights,punt,pob_n)  %>% as.data.frame()
     return(result) 
}

main_fun <- function(data) {
  n <- nrow(data)
  N <- 200

  cl <- makeCluster(detectCores() - 0) # Generando el cluster r
  clusterExport(cl,list("n","N","data","fun1"),envir = environment()) 
  clusterEvalQ(cl,{library(tidyverse)
                   library(parallel)}) 
  
  pob <- parSapply(cl,1:N,function(iteration) sample(c(0,1),n,replace = T)) %>% t() 
  gen_0 <- fun1(data= data,pob= pob)
  stopCluster(cl) 
  return(gen_0 * 10)
}

我收到以下错误

 Error in parSapply(cl,1:nrow(pob),function(comb) data[pob[comb,: 
  object 'cl' not found

可能有什么问题?,我刚刚尝试在 clusterExport 函数中传递“cl”变量,但仍然出现相同的错误。我找到的唯一解决方案是将所有函数放在 main 函数中,但我仍然想知道它发生了什么。

解决方法

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

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

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