param = ScanBamParam (what = "qname")을 인수로 지정하여 qname을 포함하여 GenomicAlignments :: readGAlignments를 사용하여 데이터를 입력하는 것이 더 편리 할 것입니다. 그런 다음 % in %로 하위 집합을 구성 할 수 있습니다. 여기
library(GenomicAlignments)
library(RNAseqData.HNRNPC.bam.chr14)
fname <- RNAseqData.HNRNPC.bam.chr14_BAMFILES[1]
want <- c("ERR127306.11930623", "ERR127306.24720935",
"ERR127306.23706011", "ERR127306.22418829", "ERR127306.13372247",
"ERR127306.20686334", "ERR127306.11412145", "ERR127306.4711647",
"ERR127306.7479582", "ERR127306.12737243")
aln <- readGAlignments(fname, param=ScanBamParam(what="qname"))
aln[mcols(aln)$qname %in% want]
BAM 파일은 물론 큰, 그리고 QName의 그 큰 부분 인 ExperimentData 패키지 중 하나를 사용하여,보다 완벽한 예입니다; 파일을 반복하여 청크로 반복하는 것이 좋습니다. 이는 yieldReduce를 사용하여 (현재 Rsamtools에서) BamFile에 yieldSize를 합리적인 (예 : 1M) 읽기 횟수로 설정하고 MAP 함수로 데이터 청크를 입력하고 처리합니다 (예 : 원치 않는 읽기 필터링), 결과를 연결하는 (선택 사항) REDUCE 함수 및 반복이 완료된 시점을 나타내는 DONE (선택 사항) 함수가 있습니다. (yieldSize 샘플 데이터 그림 수 있도록 인위적으로 작고)와 같은 솔루션은 같습니다
bfl <- BamFile(fname, yieldSize=100000) ## larger, e.g., 1M-5M
MAP <- function(bfl, want) {
## message("tick")
aln <- readGAlignments(bfl, param=ScanBamParam(what="qname"))
if (length(aln) == 0)
NA # semaphore -- DONE
else
aln[mcols(aln)$qname %in% want]
}
REDUCE <- c
DONE <- function(x) identical(x, NA)
result <- yieldReduce(bfl, MAP, REDUCE, DONE, want=want)
하나는 scanBam를 사용하여 유사한 접근 방식을 채택 할 수있다,하지만 데이터 구조 (리스트의-목록)에 더 복잡하다 처리 대상 :
x <- scanBam(fname, param=ScanBamParam(what=c("qname", "pos")))
keep <- lapply(lapply(x, "[[", "qname"), "%in%", want)
result <- Map(function(elts, keep) {
lapply(elts, "[", keep)
}, x, keep)
yieldReduce와 함께 사용할 수도 있습니다.
는 필터링과 새로운 빵 파일을 만드는 데 관심이 있다면
내가
subset(DataFrame(scanBam(bam_file)[[1]]),qname %in% qname_vector)
를 사용하여 종료
filter_factory <- function(want) {
list(KeepQname = function(x) x$qname %in% want)
}
filter <- FilterRules(filter_factory(want))
dest <- filterBam(fname, tempfile(), filter=filter,
param=ScanBamParam(what="qname"))
readGAlignments(dest)
자세한 답변을 주셔서 감사합니다. 당신의 모든 제안은 내가 원하는 것을하는 것처럼 보입니다. 세 번째는 실제로 더 나은 방법이 있어야한다고 결정했을 때 실제로 시도한 작업 버전입니다. 두 번째 해결 방법은 매우 정교하며 단 하나의 BAM 파일 만 처리해야하므로 30 초를 기다리지 않아도되지만 앞으로의 작업을 알면 좋습니다. 마지막 제안은 설명서에서 찾은 것이지만 새 파일에 쓰고 싶지 않습니다 (이 경우에는 R 스크립트를 사용하지 않고 직접 samtools를 사용합니다). 내 간단한 해결책에 비해 첫 번째 제안의 이점에 대해 의견을 말씀해 주시겠습니까? – mschilli
@ sg-lecram 당신의 해결책은 좋습니다; 주요 차이점은 GAlignments가 범위를 알고 있다는 것입니다. 예를 들어 특정 관심 영역'roi = GRanges (...)'에 더 관심이 있다면 'subsetByOverlaps (aln, roi)'또는 ' countOverlaps()'또는 다른 매우 편리한 범위 기반 연산 중 하나를 사용합니다. yieldReduce를 사용하는 데는 실제 비용이 들지 않습니다. 대부분의 경우 입력 (어쨌든 완료해야 함) 및 다운 스트림 처리에 소비됩니다. yieldReduce는 메모리 관리에 매우 유용합니다. 여러 파일의 병렬 처리와 관련하여 –