This is a test version of Biostars. For the public version, visit https://www.biostars.org.
How do I find the set of a genomicrange? (same as union(gr, gr))
library(GenomicRanges)
gr0 <- GRanges(Rle(c("chr2", "chr2", "chr1", "chr3"), c(1, 3, 2, 4)), IRanges(1:10, width=10:1))
union(gr0, gr0)
# GRanges object with 3 ranges and 0 metadata columns:
#      seqnames    ranges strand
#        <Rle> <IRanges>  <Rle>
# [1]     chr2   [1, 10]      *
# [2]     chr1   [5, 10]      *
# [3]     chr3   [7, 10]      *
# -------
#  seqinfo: 3 sequences from an unspecified genome; no seqlengths

The union operation is binary. Is there a unary union method?

r bioconductor genomicranges

1 answer

Possibly, you are referring to normalized ranges, see Section 2.1 in https://bioconductor.org/packages/release/bioc/vignettes/IRanges/inst/doc/IRangesOverview.pdf

Then, the function to use is reduce(gr0).

 > reduce(gr0)
GRanges object with 3 ranges and 0 metadata columns:
      seqnames    ranges strand
         <Rle> <IRanges>  <Rle>
  [1]     chr2      1-10      *
  [2]     chr1      5-10      *
  [3]     chr3      7-10      *
  -------
  seqinfo: 3 sequences from an unspecified genome; no seqlengths
  > identical(reduce(gr0), union(gr0,gr0))
  [1] TRUE

Log in to answer this question.