r - 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”变量,但我仍然得到同样的错误。我找到的唯一解决方案是将所有函数放在主函数中,但我仍然想知道它发生了什么。
解决方案
推荐阅读
- python - 谁能帮我解决这个问题?
- javascript - catch(next) 中的错误是如何传递给 next 的?
- api - Wrapper/Bride [Microsoft AD] < --> [REST API] 用于 Windows 服务器系统
- java - Hibernate 在更新子实体时不会更新子实体
- spring - Spring security:使用 formLogin 配置 JWT
- python - 熊猫:每周到每天,但不关闭
- c# - 将多行项目动态添加到功能区菜单c#
- amazon-web-services - AWS Quicksight 计算提交的错误 - 部门操作员未按预期工作
- python-3.x - 使用 cdk 为 lambda 添加多个安全组
- mysql - 在插入之前触发 MySQL 更新属性