Transform genomic ranges into "absolute" ranges
absoluteRanges
transforms the genomic ranges in x
into
absolute ranges i.e. into ranges counted from the beginning of
the virtual sequence obtained by concatenating all the sequences in the
underlying genome (in the order reported by seqlevels(x)
).
relativeRanges
performs the reverse transformation.
NOTE: These functions only work on small genomes. See Details section below.
absoluteRanges(x) relativeRanges(x, seqlengths) ## Related utility: isSmallGenome(seqlengths)
x |
For For |
seqlengths |
An object holding sequence lengths. This can be a named integer
(or numeric) vector with no duplicated names as returned by
For |
Because absoluteRanges
returns the absolute ranges in an
IRanges object, and because an IRanges
object cannot hold ranges with an end > .Machine$integer.max
(i.e. >= 2^31 on most platforms), absoluteRanges
cannot be used
if the size of the underlying genome (i.e. the total length of the
sequences in it) is > .Machine$integer.max
. Utility function
isSmallGenome
is provided as a mean for the user to check
upfront whether the genome is small (i.e. its size is <=
.Machine$integer.max
) or not, and thus compatible with
absoluteRanges
or not.
relativeRanges
applies the same restriction by looking at the
seqlengths
argument.
An IRanges object for absoluteRanges
.
A GRanges object for relativeRanges
.
absoluteRanges
and relativeRanges
both return an object that
is parallel to the input object (i.e. same length and names).
isSmallGenome
returns TRUE if the total length of the underlying
sequences is <= .Machine$integer.max
(e.g. Fly genome),
FALSE if not (e.g. Human genome), or NA if it cannot be computed (because
some sequence lengths are NA).
H. Pagès
GRanges objects.
IntegerRanges objects in the IRanges package.
Seqinfo objects and the seqlengths
getter in
the GenomeInfoDb package.
genomicvars for manipulating genomic variables.
The tileGenome
function for putting tiles on a
genome.
## --------------------------------------------------------------------- ## TOY EXAMPLE ## --------------------------------------------------------------------- gr <- GRanges(Rle(c("chr2", "chr1", "chr3", "chr1"), 4:1), IRanges(1:10, width=5), seqinfo=Seqinfo(c("chr1", "chr2", "chr3"), c(100, 50, 20))) ar <- absoluteRanges(gr) ar gr2 <- relativeRanges(ar, seqlengths(gr)) gr2 ## Sanity check: stopifnot(all(gr == gr2)) ## --------------------------------------------------------------------- ## ON REAL DATA ## --------------------------------------------------------------------- ## With a "small" genome library(TxDb.Dmelanogaster.UCSC.dm3.ensGene) txdb <- TxDb.Dmelanogaster.UCSC.dm3.ensGene ex <- exons(txdb) ex isSmallGenome(ex) ## Note that because isSmallGenome() can return NA (see Value section ## above), its result should always be wrapped inside isTRUE() when ## used in an if statement: if (isTRUE(isSmallGenome(ex))) { ar <- absoluteRanges(ex) ar ex2 <- relativeRanges(ar, seqlengths(ex)) ex2 # original strand is not restored ## Sanity check: strand(ex2) <- strand(ex) # restore the strand stopifnot(all(ex == ex2)) } ## With a "big" genome (but we can reduce it) library(TxDb.Hsapiens.UCSC.hg19.knownGene) txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene ex <- exons(txdb) isSmallGenome(ex) ## Not run: absoluteRanges(ex) # error! ## End(Not run) ## However, if we are only interested in some chromosomes, we might ## still be able to use absoluteRanges(): seqlevels(ex, pruning.mode="coarse") <- paste0("chr", 1:10) isSmallGenome(ex) # TRUE! ar <- absoluteRanges(ex) ex2 <- relativeRanges(ar, seqlengths(ex)) ## Sanity check: strand(ex2) <- strand(ex) stopifnot(all(ex == ex2))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.