首页 > 解决方案 > 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, 1:nrow(pob_n), function(comb) data[pob_n[comb, ], "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”变量,但我仍然得到同样的错误。我找到的唯一解决方案是将所有函数放在主函数中,但我仍然想知道它发生了什么。

标签: rparallel-processingenvironment-variablesscoping

解决方案


推荐阅读