strand-utils {GenomicRanges} | R Documentation

## Strand utilities

### Description

A bunch of useful `strand` and `invertStrand` methods.

### Usage

    ## S4 method for signature 'missing'
    strand(x)
    ## S4 method for signature 'character'
    strand(x)
    ## S4 method for signature 'factor'
    strand(x)
    ## S4 method for signature 'integer'
    strand(x)
    ## S4 method for signature 'logical'
    strand(x)
    ## S4 method for signature 'Rle'
    strand(x)
    ## S4 method for signature 'RleList'
    strand(x)
    ## S4 method for signature 'DataFrame'
    strand(x)
    ## S4 replacement method for signature 'DataFrame,ANY'
    strand(x) <- value

    ## S4 method for signature 'character'
    invertStrand(x)
    ## S4 method for signature 'factor'
    invertStrand(x)
    ## S4 method for signature 'integer'
    invertStrand(x)
    ## S4 method for signature 'logical'
    invertStrand(x)
    ## S4 method for signature 'Rle'
    invertStrand(x)
    ## S4 method for signature 'RleList'
    invertStrand(x)

### Arguments

`x` | The object from which to obtain a strand factor, strand factor Rle, or strand factor RleList object. Can be missing. See Details and Value sections below for more information.
`value` | Replacement value for the strand.

### Details

All the `strand` and `invertStrand` methods documented here return either a strand factor, strand factor Rle, or strand factor RleList object. These are factor, factor-Rle, or factor-RleList objects containing the "standard strand levels" (i.e. `+`, `-`, and `*`) and no NAs.

### Value

All the `strand` and `invertStrand` methods documented here return an object that is parallel to input object `x` when `x` is a character, factor, integer, logical, Rle, or RleList object.

For the `strand` methods:

- If `x` is missing, returns an empty factor with the "standard strand levels" i.e. `+`, `-`, and `*`.

- If `x` is a character vector or factor, it is coerced to a factor with the levels listed above. `NA` values in `x` are not accepted.

- If `x` is an integer vector, it is coerced to a factor with the levels listed above. `1`, `-1`, and `NA` values in `x` are mapped to the `+`, `-`, and `*` levels respectively.

- If `x` is a logical vector, it is coerced to a factor with the levels listed above. `FALSE`, `TRUE`, and `NA` values in `x` are mapped to the `+`, `-`, and `*` levels respectively.

- If `x` is a character-, factor-, integer-, or logical-Rle, it is transformed with `runValue(x) <- strand(runValue(x))` and returned.

- If `x` is an RleList object, each list element in `x` is transformed by calling `strand()` on it and the resulting RleList object is returned. More precisely the returned object is `endoapply(x, strand)`. Note that in addition to being parallel to `x`, this object also has the same shape as `x` (i.e. its list elements have the same lengths as in `x`).

- If `x` is a `DataFrame` object, the `"strand"` column is passed thru `strand()` and returned. If `x` has no `"strand"` column, this return value is populated with `*`s.

Each `invertStrand` method returns the same object as its corresponding `strand` method but with `"+"` and `"-"` switched.

### Author(s)

M. Lawrence and H. Pagès

### See Also

`strand`

### Examples

    strand()

    x1 <- c("-", "*", "*", "+", "-", "*")
    x2 <- factor(c("-", "-", "+", "-"))
    x3 <- c(-1L, NA, NA, 1L, -1L, NA)
    x4 <- c(TRUE, NA, NA, FALSE, TRUE, NA)

    strand(x1)
    invertStrand(x1)
    strand(x2)
    invertStrand(x2)
    strand(x3)
    invertStrand(x3)
    strand(x4)
    invertStrand(x4)

    strand(Rle(x1))
    invertStrand(Rle(x1))
    strand(Rle(x2))
    invertStrand(Rle(x2))
    strand(Rle(x3))
    invertStrand(Rle(x3))
    strand(Rle(x4))
    invertStrand(Rle(x4))

    x5 <- RleList(x1, character(0), as.character(x2))
    strand(x5)
    invertStrand(x5)

    strand(DataFrame(score=2:-3))
    strand(DataFrame(score=2:-3, strand=x3))
    strand(DataFrame(score=2:-3, strand=Rle(x3)))

    ## Sanity checks:
    target <- strand(x1)
    stopifnot(identical(target, strand(x3)))
    stopifnot(identical(target, strand(x4)))

    stopifnot(identical(Rle(strand(x1)), strand(Rle(x1))))
    stopifnot(identical(Rle(strand(x2)), strand(Rle(x2))))
    stopifnot(identical(Rle(strand(x3)), strand(Rle(x3))))
    stopifnot(identical(Rle(strand(x4)), strand(Rle(x4))))

[Package GenomicRanges version 1.42.0 Index]