使用 parallel 包实现并行化需要将循环转换为 apply 函数,然后使用 mclapply 函数来实现并行计算。以下是使用 parallel 包并行化该脚本的代码:

library(parallel)
cl <- makeCluster(detectCores()) # 创建并行计算集群
physeq1_new <- physeq1 # 复制 physeq1
physeq1_new@otu_table <- t(mclapply(1:ncol(physeq1@otu_table), function(i) {
  otu <- physeq1@otu_table[,i]
  otu_new <- ifelse(otu <= sum(otu)*0.0005, 0, otu)
  return(otu_new)
}))
physeq1_new@otu_table <- t(physeq1_new@otu_table)
stopCluster(cl) # 停止并行计算集群

首先,我们使用 makeCluster 函数创建一个并行计算集群,它将使用所有可用的 CPU 内核。然后,我们使用 mclapply 函数将并行计算应用于每列 OTU 表。在 mclapply 函数中,我们将循环的索引 1:ncol(physeq1@otu_table) 作为第一个参数,并将其它参数(function(x) ifelse(x<=sum(physeq1@otu_table[,i])*0.0005, 0, x))作为第二个参数。在每个并行计算中,我们将 OTU 表中的一列(physeq1@otu_table[,i])复制到一个新变量(otu),然后将该变量传递给匿名函数,该函数执行与原始脚本中的 sapply 函数相同的操作,并返回新的 OTU 列(otu_new)。mclapply 函数将每个新的 OTU 列收集到一个列表中,并在所有并行计算完成后返回该列表。最后,我们将列表转换回 OTU 表的形式,并将其存储在 physeq1_new@otu_table 中。最后,我们使用 stopCluster 函数停止并行计算集群。

R语言 parallel 包并行化脚本:提高 OTU 表处理效率

原文地址: https://www.cveoy.top/t/topic/oUpt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录