如何使用更快的R脚本从.sam文件生成wig文件?

如何使用更快的R脚本从.sam文件生成wig文件?,r,bioinformatics,rscript,R,Bioinformatics,Rscript,我有一个R脚本,在映射后可以从.sam文件中读取行,我想将sam文件的行解析为字符串,以便更容易地操作它们并创建我想要的wig文件,或者计算我需要的cov3和cov5。 你能帮我把这个脚本写得更快吗?如何更快地将一个巨大的.sam文件的行解析为数据帧?这是我的剧本: gc() rm(list=ls()) exptPath <- "/home/dimitris/INDEX3PerfectUnique31cov5.sam" lines <- readLines(exptPath)

我有一个R脚本,在映射后可以从.sam文件中读取行,我想将sam文件的行解析为字符串,以便更容易地操作它们并创建我想要的wig文件,或者计算我需要的cov3和cov5。 你能帮我把这个脚本写得更快吗?如何更快地将一个巨大的.sam文件的行解析为数据帧?这是我的剧本:

gc()
rm(list=ls()) 

exptPath <- "/home/dimitris/INDEX3PerfectUnique31cov5.sam"


lines <- readLines(exptPath)
pos = lines
pos
chrom = lines
chrom
pos = ""
chrom = ""
nn = length(lines)
nn

# parse lines of sam file into strings(this part is very very slow)
rr = strsplit(lines,"\t", fixed = TRUE)
rr
trr = do.call(rbind.data.frame, rr)
pos = as.numeric(as.character(trr[8:nn,4]))
# for cov3
#pos = pos+25
#pos
chrom = trr[8:nn,3]
pos = as.numeric(pos)
pos

tab1 = table(chrom,pos, exclude="")
tab1

ftab1 = as.data.frame(tab1)
ftab1 = subset(ftab1, ftab1[3] != 0)
ftab1 = subset(ftab1, ftab1[1] != "<NA>")
oftab1 = ftab1[ order(ftab1[,1]), ]
final.ftab1 = oftab1[,2:3]
write.table(final.ftab1, "ind3_cov5_wig.txt", row.names=FALSE,
            sep="   ", quote=FALSE)
gc()
rm(list=ls())

exptPath如果无法访问样本输入和输出(例如dropbox上的数据子集),则很难提供详细答案。解决方案将sam文件转换为bam

library(Rsamtools)
bam <- "/path/to/new.bam")
asBam("/path/to/old.sam", bam)
或者最终更方便

library(GenomicAlignments)
aln <- readGAlignments(bam)
## maybe cvg <- coverage(bam) ?
最终目标是使用导出到wig/bigWig/bed文件

library(rtracklayer)
export(gr, "/path/to.wig")
有大量的帮助资源,包括软件包小插曲、手册页和Bioconductor

## ...???
## gr <- GRanges(seqnames, IRanges(start, end), strand=..., score=...)
library(rtracklayer)
export(gr, "/path/to.wig")