solveUserSEW {IRanges} | R Documentation |
solveUserSEW
is a utility function that solves a set of
user-supplied start/end/width values.
solveUserSEW(refwidths, start=NA, end=NA, width=NA, translate.negative.coord=TRUE, allow.nonnarrowing=FALSE)
refwidths |
Vector of non-negative integers containing the reference widths. |
start, end, width |
Vectors of integers, eventually with NAs, containing the set of user-supplied start/end/width values. |
translate.negative.coord, allow.nonnarrowing |
TRUE or FALSE .
|
start
, end
and width
must have the same number of
elements as, or less elements than, refwidths
. In the latter case,
they are expanded cyclically to the length of refwidths
(provided
none are of zero length). After this expansion, each row in the 3-column
matrix obtained by binding those 3 vectors together must contain at least
one NA (otherwise an error is returned).
Then each row is "solved" i.e. the 2 following transformations are
performed (i
is the indice of the row):
(1) if translate.negative.coord
is TRUE then a
negative value of start[i]
or end[i]
is
considered to be a -refwidths[i]
-based coordinate so
refwidths[i]+1
is added to it to make it 1-based;
(2) the NAs in the row are treated as unknowns which values are deduced
from the known values in the row and from refwidths[i]
.
The exact rules for (2) are the following.
Rule (2a): if the row contains at least 2 NAs, then width[i]
must be
one of them (otherwise an error is returned), and if start[i]
is one
of them it is replaced by 1, and if end[i]
is one of them it is
replaced by refwidths[i]
, and finally width[i]
is replaced by
end[i] - start[i] + 1
.
Rule (2b): if the row contains only 1 NA, then it is replaced by the solution
of the width[i] == end[i] - start[i] + 1
equation.
Finally, the set of solved rows is returned as an IRanges object.
An IRanges object (with the same number of elements as
refwidths
) representing the set of solved start/end/width values,
or an error if either (1) the set of user-supplied start/end/width values
is invalid or (2) allow.nonnarrowing
is FALSE and the ranges
represented by the solved start/end/width values are not narrowing
the ranges represented by the user-supplied start/end/width values.
H. Pages
refwidths <- c(5:3, 6:7) refwidths solveUserSEW(refwidths) solveUserSEW(refwidths, start=4) solveUserSEW(refwidths, end=3, width=2) solveUserSEW(refwidths, start=-3) solveUserSEW(refwidths, start=-3, width=2) solveUserSEW(refwidths, end=-4) ## The start/end/width arguments are expanded cyclically solveUserSEW(refwidths, start=c(3, -4, NA), end=c(-2, NA))