美文网首页生信
Rdebug: error: object '.doSnowGl

Rdebug: error: object '.doSnowGl

作者: 生信云笔记 | 来源:发表于2020-08-09 11:10 被阅读0次

      做数据分析时经常会用到并行的方式来处理。大家应该都知道并行能够充分利用计算资源来降低计算需要的时间,尤其在处理较大的数据时效果更佳明显。所以R中也提供了多进程并行的包如doParallel、parallel。用法我这里就不介绍了,因为我也不怎么熟悉,有空可以学习一下。这里主要跟大家解释一下,我使用时遇到的问题,以及如何解决这个问题的。
    首先来看一下我遇到的问题,如下截图:

      看到这个报错后,我也不知道原因,就网上搜索了一番,网上给出的说法是多进程任务时,有些节点找不到 “doParallel”包的位置。回头看一下我使用的脚本内容,发现还真有可能是这个原因。
    我使用的脚本内容并行段的代码,主要的功能就是将bam文件按染色体分隔成小的bam文件,然后做一些统计,如下所示:

    suppressMessages(library(doParallel))
    
    foreach(i=rownames(temp_chromosome_count)) %dopar% {
        if (Load_samtools_module) {
          Sys.setenv(PATH = paste("/opt/ohpc/pub/libs/samtools/1.4/bin/", Sys.getenv("PATH"), sep = ":"))
        }
    
        temp_export_bam_command = paste("samtools view -b",temp_sorted_bam,i,">",paste(k,"Viral_BAM_files/",i,".bam ",sep = ""))
        temp_export_bam_command = paste("samtools view -b ",temp_sorted_bam," \'",i,"\'"," > \'",k,"Viral_BAM_files/",i,".bam\'",sep = "")
    
        system(temp_export_bam_command)
        cat(paste(rownames(temp_chromosome_count),"\n"))
      }
    

    所以我就按照网上的思路修改了代码,加了几句代码,内容如下:

    suppressMessages(library(doParallel))
    suppressMessages(library(parallel))
    
    cl <- makeCluster(8)
    registerDoParallel(cl)
    clusterEvalQ(cl, .libPaths("/home/chenyl/software/rlib/r-3.6.1_lib"))
    
    foreach(i=rownames(temp_chromosome_count)) %dopar% {
        if (Load_samtools_module) {
          Sys.setenv(PATH = paste("/opt/ohpc/pub/libs/samtools/1.4/bin/", Sys.getenv("PATH"), sep = ":"))
        }
    
        temp_export_bam_command = paste("samtools view -b",temp_sorted_bam,i,">",paste(k,"Viral_BAM_files/",i,".bam ",sep = ""))
        temp_export_bam_command = paste("samtools view -b ",temp_sorted_bam," \'",i,"\'"," > \'",k,"Viral_BAM_files/",i,".bam\'",sep = "")
    
        system(temp_export_bam_command)
        cat(paste(rownames(temp_chromosome_count),"\n"))
      }
    #循环的中间代码省略
    ....
    }
    #循环结束后结束集群的调用
     stopCluster(cl)
    

      重要的是 clusterEvalQ(cl, .libPaths("/home/chenyl/software/rlib/r-3.6.1_lib")) 是这句代码,有了这句代码,服务器在并行任务时,每一个节点的R都会加载这个库路径(/home/chenyl/software/rlib/r-3.6.1_lib)到R环境中,这样就能找到安装在该路径下的 'doParallel'包了。

    最后

     emm,今天就分享到这里,如果你也遇到同样的问题,希望这个帖子可以对你有所帮助。

    相关文章

      网友评论

        本文标题:Rdebug: error: object '.doSnowGl

        本文链接:https://www.haomeiwen.com/subject/avlrrktx.html