遍历多个目录中的每个文件并应用 MergeSamFiles

Loop over each file in multiple directories and apply MergeSamFiles

我的三个子文件夹 folder1、folder2、folder3 中有很多名为 tst.bam 的对象。我想合并每个子文件夹中存在的 bam 文件,并使用子文件夹名称 (folder1.bam、folder2.bam、folder3.bam) 命名合并的 bam 文件。

合并多个 bam 文件的命令是

java -jar picard.jar MergeSamFiles \
      I=input_1.bam \
      I=input_2.bam \
      O=merged_files.bam

bam.dir<- c("folder1","folder2","folder3")

for (i in 1:length(folder1)){
      all.bam.files <- list.files(folder1[i], pattern = "pairs.bam",full.names=T)
        szFiles <- list.files(path = folder1[i],pattern = "_pairs.bam$",full.names = TRUE) 
        szNewFiles <- dQuote(szFiles)
NszFiles <- paste(paste("I=", szNewFiles, sep =""),collapse = " ",sep ="")
 system(paste0("java -XX:ParallelGCThreads=5 -Djava.io.tmpdir=tmp/ -Xmx8g -jar picard.jar MergeSamFiles"), cat(c(NszFiles,"\n")), "O= ", paste(basename(folder1[i]),".bam", sep = ""))
  }

获取错误

Error in system(paste0("java -XX:ParallelGCThreads=5 -Djava.io.tmpdir=tmp/ -Xmx8g -jar.jar MergeSamFiles"), : 'intern' must be TRUE or FALSE

我知道这不是最好的做法,但渴望看到优雅的方式。

由于您似乎倾向于使用 R 处理 bam 文件,因此您可能对 Rsamtools 感兴趣。它和 samtools 一样快,因为它是 运行 samtools 在后台编译的 C 代码。 https://bioconductor.org/packages/release/bioc/html/Rsamtools.html

例如:

library(Rsamtools)

bam.dir <- c("folder1","folder2","folder3")

for (dir in bam.dir) {
    bam_files <- list.files(path=dir, pattern="bam$", full.names=TRUE)
    new_file_name <- file.path(dir, "merged.bam")
    mergeBam(files=bam_files, destination=new_file_name)
}