2017-06-14 145 views
1

我正在尝试使用clusterProfiler bioconductor R软件包进行排列分析。为了举例说明我的问题,我会在手册中使用的例子,我适应并行运行:使用SQL数据库在R中进行并行处理

library(clusterProfiler) 
library(doMC) 
library(foreach) 

data(geneList, package="DOSE") 
PermNumber <- 10000 
registerDoMC(15) #change the 2 to your number of CPU cores 
ggoList <- NULL 
ggoList <- foreach(lo=1:PermNumber) %dopar% { 
    print(lo) 
    gene <- names(geneList)[abs(geneList) > 2] 
    gene.df <- bitr(gene, fromType = "ENTREZID", 
      toType = c("ENSEMBL", "SYMBOL"), 
      OrgDb = org.Hs.eg.db) 
gene} 

虽然这不平行环路正常工作,出现在并行循环中的以下错误:

错误{:任务2失败 - “数据库磁盘映像格式有误”

我在一些论坛上发现了一个类似的问题,但他们都不在R或clusterProfiler。据我了解,问题发生可能是由于SQL数据库bitr使用(很难在SQL中实现并行处理)。任何想法超越这个问题?

+0

你说过'虽然这工作正常,没有循环,...'。你可以用'%do%'而不是'%dopar%'来试试这个吗?我想知道你的问题是循环执行还是**并行**循环执行。 – CPak

+0

@ChiPak,你是对的。然而,我的观点是如何在循环内并行运行表达式。 – user3091668

+0

请澄清。它是否与循环执行一起工作? – CPak

回答

0

我找不到doMC所以我用paralleldoParallel来代替。 doMC应该可以工作,但也可以用parallel来尝试。

library(parallel) 
library(doParallel) 
registerDoParallel(detectCores()) # this detects number of cores on system 

注意,我不得不下载OrgDb分别。 (您可能已经下载了这一点)。

好吧,我没有收到相同的error如你,但下面还是为我工作:

ggoList <- foreach(lo=1:PermNumber, .packages="clusterProfiler") %dopar% { 
      print(lo) 
      gene <- names(geneList)[abs(geneList) > 2] 
      gene.df <- bitr(geneID = gene, 
          fromType = "ENTREZID", 
          toType= c("ENSEMBL", "SYMBOL"), 
          OrgDb = "org.Hs.eg.db") 
      gene} 

我想是因为你需要可能会出现您的问题将clusterProfiler导出到每个核心,以便bitr在每个核心中工作。我在上面的代码中使用.packages="clusterProfiler"导出了clusterProfiler。在尝试使用较大数字之前先用PermNumber <- 2进行测试。