Windows系统下如何替换mclapply与mc.cores适配代码?
Windows下替换mclapply的适配方案
报错原因
Windows系统不支持mclapply设置mc.cores > 1,因为该函数依赖类Unix系统的fork进程机制,Windows未实现这一机制。
替换方案
用parallel包的parLapply替代mclapply,需按以下步骤调整代码:
- 初始化并行计算集群
- 将所需函数依赖的包加载到集群节点
- 执行并行计算逻辑
- 计算完成后关闭集群释放资源
修改后的完整代码
# 加载parallel包 library(parallel) # 初始化集群,核心数对应原代码的nrow(params_2) cl <- makeCluster(nrow(params_2)) # 将filter_taxa所属的包(比如phyloseq)加载到所有集群节点 clusterEvalQ(cl, library(phyloseq)) # 用parLapply替换mclapply完成计算 parLapply(cl, ., function(x) {filter_taxa(x, function(y) sum(y) > 0, TRUE)} ) -> Ps_obj_SIP_each_rep_l # 关闭集群,释放系统资源 stopCluster(cl)
简化替代方案(非并行)
如果对计算速度要求不高,也可以直接用基础包的lapply替代,无需并行设置:
lapply(., function(x) {filter_taxa(x, function(y) sum(y) > 0, TRUE)} ) -> Ps_obj_SIP_each_rep_l
内容的提问来源于stack exchange,提问作者Noya Ran
相关产品推荐
相关产品推荐

