This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Split a GRanges into one GRanges per chromosome/strand pair and put in GRangesList?

I want to find the coverage for each chromosome/strand pair, but unfortunately, the coverage-function takes no ìgnore.strand=FALSE` argument. Therefore I want to split a GRanges into the constituent chromosome/strand pairs and run coverage on the GRangesList. How do I do that?

Example data:

library(GenomicRanges)
gr <- GRanges( seqnames=Rle(c("chr1", "chr2", "chr1", "chr3"), c(1, 3, 2, 4)),
ranges=IRanges(1:10, end=10),
strand=Rle(strand(c("-", "+", "*", "+", "-")), c(1, 2, 2, 3, 2)),
seqlengths=c(chr1=11, chr2=12, chr3=13))
genomicranges

1 answer

There is no need to use GRangesList() as the coverage() collapses the list to a normal GRanges() anyway. Therefore, simply split by strand (not discussing now if the definition of coverage in a strand-specific manner makes sense or not):

coverage(gr[gr@strand == "+"])
coverage(gr[gr@strand == "-"])

Then I cannot do RleList1 - RleList2, but thanks :)

Log in to answer this question.