solveUserSEW {IRanges}R Documentation

The SEW (Start/End/Width) interface

Description

solveUserSEW is a utility function that solves a set of user-supplied start/end/width values.

Usage

  solveUserSEW(refwidths, start=NA, end=NA, width=NA,
               translate.negative.coord=TRUE,
               allow.nonnarrowing=FALSE)

Arguments

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.

Details

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.

Value

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.

Author(s)

H. Pages

See Also

IRanges-class, narrow

Examples

  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))

[Package IRanges version 1.1.55 Index]