The GRangesAnchored class and the IRangesAnchored
class allow components of a GRanges or IRanges (start, end, center)
to be held fixed.
anchor(x)
unanchor(x)
anchor_start(x)
anchor_end(x)
anchor_center(x)
anchor_centre(x)
anchor_3p(x)
anchor_5p(x)a Ranges object
a RangesAnchored object which has the same appearance as a regular Ranges object but with an additional slot displaying an anchor.
Anchoring will fix a Ranges start, end, or center positions,
so these positions will remain the same when performing arithimetic.
For GRanges objects, the function
(anchor_3p()) will fix the start for the negative strand,
while anchor_5p() will fix the end for the
positive strand. Anchoring modifies how arithmetic is performed, for example
modifying the width of a range with set_width() or stretching a
range with stretch(). To remove anchoring use unanchor().
Depending on how you want to fix the components of a Ranges, there are
five ways to construct a RangesAnchored class. Here x is either
an IRanges or GRanges object.
anchor_start(x)Fix the start coordinates
anchor_end(x)Fix the end coordinates
anchor_center(x)Fix the center coordinates
anchor_3p(x)On the negative strand fix the start coordinates, and for positive or unstranded ranges fix the end coordinates.
anchor_5p(x)On the positive or unstranded ranges fix the start coordinates, coordinates and for negative stranded ranges fix the end coordinates.
To see what has been anchored use the function anchor.
This will return a character vector containing a valid anchor.
It will be set to one of c("start", "end", "center") for an
IRanges object or one of
c("start", "end", "center", "3p", "5p") for a GRanges object.
df <- data.frame(start = 1:10, width = 5)
rng <- as_iranges(df)
rng_by_start <- anchor_start(rng)
rng_by_start
#> IRanges object with 10 ranges and 0 metadata columns:
#> Anchored by: start
#> start end width
#> <integer> <integer> <integer>
#> [1] 1 5 5
#> [2] 2 6 5
#> [3] 3 7 5
#> [4] 4 8 5
#> [5] 5 9 5
#> [6] 6 10 5
#> [7] 7 11 5
#> [8] 8 12 5
#> [9] 9 13 5
#> [10] 10 14 5
anchor(rng_by_start)
#> [1] "start"
mutate(rng_by_start, width = 3L)
#> IRanges object with 10 ranges and 0 metadata columns:
#> start end width
#> <integer> <integer> <integer>
#> [1] 1 3 3
#> [2] 2 4 3
#> [3] 3 5 3
#> [4] 4 6 3
#> [5] 5 7 3
#> [6] 6 8 3
#> [7] 7 9 3
#> [8] 8 10 3
#> [9] 9 11 3
#> [10] 10 12 3
grng <- as_granges(df,
seqnames = "chr1",
strand = c(rep("-", 5), rep("+", 5)))
rng_by_5p <- anchor_5p(grng)
rng_by_5p
#> GRanges object with 10 ranges and 0 metadata columns:
#> Anchored by: 5p
#> seqnames ranges strand
#> <Rle> <IRanges> <Rle>
#> [1] chr1 1-5 -
#> [2] chr1 2-6 -
#> [3] chr1 3-7 -
#> [4] chr1 4-8 -
#> [5] chr1 5-9 -
#> [6] chr1 6-10 +
#> [7] chr1 7-11 +
#> [8] chr1 8-12 +
#> [9] chr1 9-13 +
#> [10] chr1 10-14 +
#> -------
#> seqinfo: 1 sequence from an unspecified genome; no seqlengths
mutate(rng_by_5p, width = 3L)
#> GRanges object with 10 ranges and 0 metadata columns:
#> seqnames ranges strand
#> <Rle> <IRanges> <Rle>
#> [1] chr1 3-5 -
#> [2] chr1 4-6 -
#> [3] chr1 5-7 -
#> [4] chr1 6-8 -
#> [5] chr1 7-9 -
#> [6] chr1 6-8 +
#> [7] chr1 7-9 +
#> [8] chr1 8-10 +
#> [9] chr1 9-11 +
#> [10] chr1 10-12 +
#> -------
#> seqinfo: 1 sequence from an unspecified genome; no seqlengths