遍历多个目录中的每个文件并应用 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)
}
我的三个子文件夹 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)
}