2016-05-14 10 views
1

Ich habe eine Vielzahl von Objekten namens in drei meiner Unterordner Ordner1, Ordner2, Ordner3. Ich möchte die Bam-Dateien, die in jedem Unterordner vorhanden sind, zusammenführen und die zusammengeführten Dateien bam mit dem Namen des Unterordners (folder1.bam, folder2.bam, folder3.bam) benennen.Schleife über jede Datei in mehreren Verzeichnissen und gelten MergeSamFiles

Befehl mehrere bam-Dateien für die Zusammenführung ist

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 = "")) 
    } 

bekommen Fehler

Fehler im System (paste0 ("java -XX: ParallelGCThreads = 5 -Djava.io.tmpdir = tmp/-Xmx8g -jar.jar MergeSamFiles "):‚intern‘muss

WAHR oder FALSCH sein ich weiß, es ist nicht der beste Weg zu tun, aber eifrig an der ele aussehen nicht so.

+0

Dieser spezielle Fehler, ' 'intern' muss wahr sein oder false', geschieht, weil Sie eine vorzeitige') haben 'innerhalb von' System (paste0 (... 'wodurch die' system'-Funktion versucht, 'cat (c (Nsz ...') als 'internes' Argument zu interpretieren. Überprüfen Sie '? system', um zu sehen, was ich meine. – bdemarest

Antwort

3

Da Sie geneigt scheinen, bam-Dateien mit R zu bearbeiten, könnten Sie Interesse an Rsamtools haben. Es ist nur so schnell wie Sammelobjekte, weil es im Hintergrund kompilierten C-Code ausführt. https://bioconductor.org/packages/release/bioc/html/Rsamtools.html

Zum Beispiel:

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) 
} 
Verwandte Themen