diff --git a/DESCRIPTION b/DESCRIPTION index 97c27cf..c0102dd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -56,7 +56,6 @@ Suggests: tidyverse Collate: utils.R - hasGRanges.R BSseq-class.R BSseqTstat_class.R MethylCounts.R diff --git a/NAMESPACE b/NAMESPACE index 1848f8b..04bd11c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -55,12 +55,10 @@ importFrom(R.utils, "isGzipped", "isBzipped", "gunzip", "bunzip2") ## Exporting ## -exportClasses("hasGRanges", - "BSseq", +exportClasses("BSseq", "BSseqTstat", "BSseqStat", - "MethylCounts", - "matrixOrNULL") + "MethylCounts") exportMethods("[", "show", "seqnames", "seqnames<-", diff --git a/R/BSmooth.R b/R/BSmooth.R index 79b4f9b..c1ae463 100644 --- a/R/BSmooth.R +++ b/R/BSmooth.R @@ -1,7 +1,7 @@ # Internal functions ----------------------------------------------------------- -.rowTickmarks <- function(hasGRanges, maxGap) { - gr <- granges(hasGRanges) +.rowTickmarks <- function(BSseq, maxGap) { + gr <- granges(BSseq) # NOTE: This relies on 'gr' being sorted, so really want to be sure of this! stopifnot(!is.unsorted(gr)) clusters <- reduce(gr, min.gapwidth = maxGap, with.revmap = TRUE) @@ -13,7 +13,7 @@ makeClusters <- function(hasGRanges, maxGap = 10^8) { chrOrder <- as.character(runValue(seqnames(hasGRanges))) if(anyDuplicated(chrOrder)) - stop("argument 'hasGRanges' is not properly order") + stop("argument 'hasGRanges' is not properly ordered") grBase <- granges(hasGRanges) clusters <- reduce(resize(grBase, width = 2*maxGap + 1, fix = "center")) start(clusters) <- pmax(rep(1, length(clusters)), start(clusters)) diff --git a/R/BSmooth.fstat.R b/R/BSmooth.fstat.R index f1ec98f..f30e344 100644 --- a/R/BSmooth.fstat.R +++ b/R/BSmooth.fstat.R @@ -53,7 +53,7 @@ smoothSds <- function(BSseqStat, k = 101, qSd = 0.75, mc.cores = 1, stop("need to set argument 'maxGap'") if(verbose) cat("[smoothSds] preprocessing ... ") ptime1 <- proc.time() - clusterIdx <- makeClusters(granges(BSseqStat), maxGap = maxGap) + clusterIdx <- makeClusters(BSseqStat, maxGap = maxGap) ptime2 <- proc.time() stime <- (ptime2 - ptime1)[3] if(verbose) cat(sprintf("done in %.1f sec\n", stime)) @@ -137,7 +137,7 @@ localCorrectStat <- function(BSseqStat, threshold = c(-15,15), mc.cores = 1, ver maxGap <- BSseqStat$parameters$maxGap if(verbose) cat("[BSmooth.tstat] preprocessing ... ") ptime1 <- proc.time() - clusterIdx <- makeClusters(BSseqStat$gr, maxGap = maxGap) + clusterIdx <- makeClusters(BSseqStat, maxGap = maxGap) ptime2 <- proc.time() stime <- (ptime2 - ptime1)[3] if(verbose) cat(sprintf("done in %.1f sec\n", stime)) diff --git a/R/BSseqStat_class.R b/R/BSseqStat_class.R index 4108622..9e0fd85 100644 --- a/R/BSseqStat_class.R +++ b/R/BSseqStat_class.R @@ -1,4 +1,4 @@ -setClass("BSseqStat", contains = "hasGRanges", +setClass("BSseqStat", contains = "GRanges", representation(stats = "list", parameters = "list") ) @@ -9,7 +9,7 @@ setValidity("BSseqStat", function(object) { anyDuplicated(names(object@stats))) msg <- validMsg(msg, "the 'stats' list needs to be named with unique names.") for(name in c("rawSds", "smoothsSds", "stat", "rawTstats")) { - if(name %in% names(object@stats) && isTRUE(nrow(object@stats[[name]]) != length(object@gr))) + if(name %in% names(object@stats) && isTRUE(nrow(object@stats[[name]]) != length(object))) msg <- validMsg(msg, sprintf("component '%s' of slot 'stats' has to have the same number of rows as slot 'gr' is long", name)) } if(is.null(msg)) TRUE else msg @@ -24,11 +24,7 @@ setMethod("show", signature(object = "BSseqStat"), }) setMethod("[", "BSseqStat", function(x, i, ...) { - if(missing(i)) - stop("need [i] for subsetting") - if(missing(i)) - return(x) - x@gr <- x@gr[i] + i <- normalizeSingleBracketSubscript(i, x) statnames <- names(x@stats) names(statnames) <- statnames x@stats <- lapply(statnames, function(nam) { @@ -38,17 +34,32 @@ setMethod("[", "BSseqStat", function(x, i, ...) { } x@stats[[nam]] }) - x + callNextMethod() }) BSseqStat <- function(gr = NULL, stats = NULL, parameters = NULL) { - out <- new("BSseqStat") - out@gr <- gr - out@stats <- stats - out@parameters <- parameters - out + new("BSseqStat", gr, stats = stats, parameters = parameters) } +setMethod("updateObject", "BSseqStat", + function(object, ..., verbose = FALSE) { + if (!.hasSlot(object, "gr")) { + return(callNextMethod()) + } + if (verbose) + message("[updateObject] ", class(object), " object ", + "uses old internal representation from\n", + "[updateObject] bsseq <= 1.49.2. ", + "Updating it ... ", appendLF=FALSE) + gr <- updateObject(object@gr) + ans <- BSseqStat(gr = gr, stats = object@stats, + parameters = object@parameters) + if (verbose) + message("OK") + ans + } +) + # TODO: updateObject() to use ordinary matrix instead of DelayedMatrix with # in-memory seed. # setMethod("updateObject", "BSseqStat", diff --git a/R/BSseqTstat_class.R b/R/BSseqTstat_class.R index a1dee49..cbcf7ad 100644 --- a/R/BSseqTstat_class.R +++ b/R/BSseqTstat_class.R @@ -1,11 +1,14 @@ -setClass("BSseqTstat", contains = "hasGRanges", - representation(stats = "matrix", +## Add new union members as needed (e.g. "SparseMatrix"). +setClassUnion("matrix_OR_DelayedMatrix", c("matrix", "DelayedMatrix")) + +setClass("BSseqTstat", contains = "GRanges", + representation(stats = "matrix_OR_DelayedMatrix", parameters = "list") ) setValidity("BSseqTstat", function(object) { msg <- NULL - if(length(object@gr) != nrow(object@stats)) - msg <- c(msg, "length of 'gr' is different from the number of rows of 'stats'") + if(length(object) != nrow(object@stats)) + msg <- c(msg, "'stats' must have one row per methylation locus") if(is.null(msg)) TRUE else msg }) @@ -20,21 +23,13 @@ setMethod("show", signature(object = "BSseqTstat"), }) setMethod("[", "BSseqTstat", function(x, i, ...) { - if(missing(i)) - stop("need [i] for subsetting") - if(missing(i)) - return(x) - x@gr <- x@gr[i] + i <- normalizeSingleBracketSubscript(i, x) x@stats <- x@stats[i,, drop = FALSE] - x + callNextMethod() }) BSseqTstat <- function(gr = NULL, stats = NULL, parameters = NULL) { - out <- new("BSseqTstat") - out@gr <- gr - out@stats <- stats - out@parameters <- parameters - out + new("BSseqTstat", gr, stats = stats, parameters = parameters) } summary.BSseqTstat <- function(object, ...) { @@ -68,10 +63,20 @@ plot.BSseqTstat <- function(x, y, ...) { } setMethod("updateObject", "BSseqTstat", - function(object, ...) { - stats <- object@stats - stats <- stats - object@stats <- stats - object - } + function(object, ..., verbose = FALSE) { + if (!.hasSlot(object, "gr")) { + return(callNextMethod()) + } + if (verbose) + message("[updateObject] ", class(object), " object ", + "uses old internal representation from\n", + "[updateObject] bsseq <= 1.49.2. ", + "Updating it ... ", appendLF=FALSE) + gr <- updateObject(object@gr) + ans <- BSseqTstat(gr = gr, stats = object@stats, + parameters = object@parameters) + if (verbose) + message("OK") + ans + } ) diff --git a/R/hasGRanges.R b/R/hasGRanges.R deleted file mode 100644 index 8742879..0000000 --- a/R/hasGRanges.R +++ /dev/null @@ -1,135 +0,0 @@ -setClassUnion("matrixOrNULL", c("matrix", "NULL")) - -setClass("hasGRanges", - representation(gr = "GRanges")) - -setMethod("seqnames", signature(x = "hasGRanges"), function(x) { - seqnames(x@gr) -}) -setReplaceMethod("seqnames", "hasGRanges", function(x, value) { - seqnames(x@gr) <- value - x -}) - -setMethod("seqlevels", signature(x = "hasGRanges"), function(x) { - seqlevels(x@gr) -}) -setReplaceMethod("seqlevels", "hasGRanges", function(x, value) { - seqlevels(x@gr) <- value - x -}) - -setMethod("seqlengths", signature(x = "hasGRanges"), function(x) { - seqlengths(x@gr) -}) -setReplaceMethod("seqlengths", "hasGRanges", function(x, value) { - seqlengths(x@gr) <- value - x -}) - -setMethod("granges", signature(x = "hasGRanges"), - function(x, use.names = TRUE, use.mcols = FALSE, ...) - granges(x@gr, use.names = use.names, use.mcols = use.mcols, ...) -) - -## FIXME: might want a granges replacement function - -setMethod("start", "hasGRanges", function(x, ...) { - start(x@gr, ...) -}) -setReplaceMethod("start", "hasGRanges", function(x, check = TRUE, value) { - start(x@gr, check = check) <- value - x -}) - -setMethod("end", "hasGRanges", function(x, ...) { - end(x@gr, ...) -}) -setReplaceMethod("end", "hasGRanges", function(x, check = TRUE, value) { - end(x@gr, check = check) <- value - x -}) - -setMethod("width", "hasGRanges", function(x) { - width(x@gr) -}) -setReplaceMethod("width", "hasGRanges", function(x, check = TRUE, value) { - width(x@gr, check = check) <- value - x -}) - -setMethod("strand", "hasGRanges", function(x) { - strand(x@gr) -}) -setReplaceMethod("strand", "hasGRanges", function(x, value) { - strand(x@gr) <- value - x -}) - -setMethod("length", "hasGRanges", function(x) length(x@gr)) - -setMethod("[", "hasGRanges", function(x, i, ...) { - if(missing(i)) - stop("need [i] for subsetting") - if(missing(i)) - return(x) - x@gr <- x@gr[i] - x -}) - -setMethod("findOverlaps", - signature(query = "hasGRanges", subject = "GenomicRanges"), - function (query, subject, maxgap = -1L, minoverlap = 0L, - type = c("any", "start", "end", "within", "equal"), - select = c("all", "first", "last", "arbitrary"), - ignore.strand = FALSE, ...) { - findOverlaps(query = query@gr, subject = subject, - maxgap = maxgap, minoverlap = minoverlap, - type = match.arg(type), select = match.arg(select), - ignore.strand = ignore.strand, ...) - }) - -setMethod("findOverlaps", - signature(query = "GenomicRanges", subject = "hasGRanges"), - function (query, subject, maxgap = -1L, minoverlap = 0L, - type = c("any", "start", "end", "within", "equal"), - select = c("all", "first", "last", "arbitrary"), - ignore.strand = FALSE, ...) { - findOverlaps(query = query, subject = subject@gr, - maxgap = maxgap, minoverlap = minoverlap, - type = match.arg(type), select = match.arg(select), - ignore.strand = ignore.strand, ...) - }) - -setMethod("findOverlaps", - signature(query = "hasGRanges", subject = "hasGRanges"), - function (query, subject, maxgap = -1L, minoverlap = 0L, - type = c("any", "start", "end", "within", "equal"), - select = c("all", "first", "last", "arbitrary"), - ignore.strand = FALSE, ...) { - findOverlaps(query = query@gr, subject = subject@gr, - maxgap = maxgap, minoverlap = minoverlap, - type = match.arg(type), select = match.arg(select), - ignore.strand = ignore.strand, ...) - }) - -setMethod("overlapsAny", c("hasGRanges", "GenomicRanges"), - IRanges:::default_overlapsAny -) -setMethod("overlapsAny", c("GenomicRanges", "hasGRanges"), - IRanges:::default_overlapsAny -) -setMethod("overlapsAny", c("hasGRanges", "hasGRanges"), - IRanges:::default_overlapsAny -) - -setMethod("subsetByOverlaps", c("hasGRanges", "GenomicRanges"), - IRanges:::default_subsetByOverlaps -) -setMethod("subsetByOverlaps", c("GenomicRanges", "hasGRanges"), - IRanges:::default_subsetByOverlaps -) -setMethod("subsetByOverlaps", c("hasGRanges", "hasGRanges"), - IRanges:::default_subsetByOverlaps -) - diff --git a/man/BSseqStat-class.Rd b/man/BSseqStat-class.Rd index cc26fd1..79b8877 100644 --- a/man/BSseqStat-class.Rd +++ b/man/BSseqStat-class.Rd @@ -17,9 +17,11 @@ } \arguments{ \item{gr}{The genomic locations as an object of class \code{GRanges}.} - \item{stats}{The statistics, as a list of matrix-like objects (see - 'Details' below).} - \item{parameters}{A list of parameters.} + \item{stats}{A list of matrix-like objects (see 'Details' below) with + list elements representing various statistics for methylation loci + along the genome.} + \item{parameters}{A list of parameters, as an object of class \code{list}, + representing how the statistics were computed.} } \details{ The matrix-like elements of the list in the 'stats' slot will be @@ -35,19 +37,8 @@ However, usually objects are returned by \code{BSmooth.fstat(...)} and not constructed by the user. } -\section{Slots}{ - \describe{ - \item{\code{stats}:}{This is a list of \code{\link[DelayedArray]{DelayedMatrix}} - objects with list elements representing various statistics for - methylation loci along the genome.} - \item{\code{parameters}:}{Object of class \code{list}. A list of - parameters representing how the statistics were computed.} - \item{\code{gr}:}{Object of class \code{GRanges} giving genomic - locations.} - } -} \section{Extends}{ - Class \code{\linkS4class{hasGRanges}}, directly. + Class \code{\link[GenomicRanges]{GRanges}}, directly. } \section{Methods}{ \describe{ @@ -57,10 +48,11 @@ } } \section{Utilities}{ - This class extends \code{hasGRanges} and therefore inherits a number - of useful \code{GRanges} methods that operate on the \code{gr} slot, - used for accessing and setting the genomic locations and also do - \code{subsetByOverlaps}. + This class extends \code{\link[GenomicRanges]{GRanges}} and therefore + inherits the full \code{GRanges} API. This means that \code{BSseqStat} + objects support any operation supported by \code{GRanges} objects, like + \code{seqnames}, \code{start}, \code{end}, \code{width}, \code{strand}, + \code{[}, \code{findOverlaps}, \code{subsetByOverlaps}, etc... } \section{Coercion}{ Package version 1.11.1 introduced a new version of representing @@ -71,7 +63,8 @@ Kasper Daniel Hansen \email{khansen@jhsph.edu} } \seealso{ - \code{\linkS4class{hasGRanges}} for accessing the genomic locations. + \code{\link[GenomicRanges]{GRanges}} in the \pkg{GenomicRanges} package + for accessing the genomic locations. \code{\link{BSmooth.fstat}} for a function that returns objects of class \code{BSseqStat}, and \code{\link{smoothSds}}, \code{\link{computeStat}} and \code{\link{dmrFinder}} diff --git a/man/BSseqTstat-class.Rd b/man/BSseqTstat-class.Rd index 4b17db5..a5af22a 100644 --- a/man/BSseqTstat-class.Rd +++ b/man/BSseqTstat-class.Rd @@ -17,8 +17,11 @@ } \arguments{ \item{gr}{The genomic locations as an object of class \code{GRanges}.} - \item{stats}{The statistics, as a matrix-like object (see 'Details' below).} - \item{parameters}{A list of parameters.} + \item{stats}{A matrix-like object (see 'Details' below) with columns + representing various statistics for methylation loci along the + genome.} + \item{parameters}{A list of parameters, as an object of class \code{list}, + representing how the t-statistics were computed.} } \details{ @@ -35,20 +38,8 @@ Objects can be created by calls of the form \code{BSseqTstat(...)}. However, usually objects are returned by \code{BSmooth.tstat(...)} and not constructed by the user.. } -\section{Slots}{ - \describe{ - \item{\code{stats}:}{This is a - \code{\link[DelayedArray]{DelayedMatrix}} object with columns - representing various statistics for methylation loci along the - genome.} - \item{\code{parameters}:}{Object of class \code{list}. A list of - parameters representing how the t-statistics were computed.} - \item{\code{gr}:}{Object of class \code{GRanges} giving genomic - locations.} - } -} \section{Extends}{ -Class \code{\linkS4class{hasGRanges}}, directly. +Class \code{\link[GenomicRanges]{GRanges}}, directly. } \section{Methods}{ \describe{ @@ -58,10 +49,11 @@ Class \code{\linkS4class{hasGRanges}}, directly. } } \section{Utilities}{ - This class extends \code{hasGRanges} and therefore inherits a number - of useful \code{GRanges} methods that operate on the \code{gr} slot, - used for accessing and setting the genomic locations and also do - \code{subsetByOverlaps}. + This class extends \code{\link[GenomicRanges]{GRanges}} and therefore + inherits the full \code{GRanges} API. This means that \code{BSseqTstat} + objects support any operation supported by \code{GRanges} objects, like + \code{seqnames}, \code{start}, \code{end}, \code{width}, \code{strand}, + \code{[}, \code{findOverlaps}, \code{subsetByOverlaps}, etc... } \section{Coercion}{ Package version 1.11.1 introduced a new version of representing @@ -72,8 +64,9 @@ Class \code{\linkS4class{hasGRanges}}, directly. Kasper Daniel Hansen \email{khansen@jhsph.edu} } \seealso{ - The package vignette(s). \code{\linkS4class{hasGRanges}} for accessing - the genomic locations. \code{\link{BSmooth.tstat}} for a function + The package vignette(s). \code{\link[GenomicRanges]{GRanges}} in the + \pkg{GenomicRanges} package for accessing the genomic locations. + \code{\link{BSmooth.tstat}} for a function that returns objects of class \code{BSseqTstat}, and \code{\link{dmrFinder}} for a function that computes DMRs based on the t-statistics. Also see \code{\link[bsseqData]{BS.cancer.ex.tstat}} for an example of the @@ -82,6 +75,7 @@ Class \code{\linkS4class{hasGRanges}}, directly. \examples{ if(require(bsseqData)) { data(BS.cancer.ex.tstat) + BS.cancer.ex.tstat <- updateObject(BS.cancer.ex.tstat) dmrFinder(BS.cancer.ex.tstat) } } diff --git a/man/dmrFinder.Rd b/man/dmrFinder.Rd index 55ac408..657020c 100644 --- a/man/dmrFinder.Rd +++ b/man/dmrFinder.Rd @@ -71,6 +71,7 @@ dmrFinder(bstat, cutoff = NULL, qcutoff = c(0.025, 0.975), } \examples{ if(require(bsseqData)) { + BS.cancer.ex.tstat <- updateObject(BS.cancer.ex.tstat) dmrs0 <- dmrFinder(BS.cancer.ex.tstat, cutoff = c(-4.6, 4.6), verbose = TRUE) dmrs <- subset(dmrs0, abs(meanDiff) > 0.1 & n >= 3) } diff --git a/man/getStats.Rd b/man/getStats.Rd index ba912ac..a234e45 100644 --- a/man/getStats.Rd +++ b/man/getStats.Rd @@ -39,6 +39,7 @@ getStats(bstat, regions = NULL, ...) \examples{ if(require(bsseqData)) { data(BS.cancer.ex.tstat) + BS.cancer.ex.tstat <- updateObject(BS.cancer.ex.tstat) head(getStats(BS.cancer.ex.tstat)) reg <- GRanges(seqnames = c("chr22", "chr22"), ranges = IRanges(start = c(1, 2*10^7), end = c(2*10^7 +1, 4*10^7))) diff --git a/man/hasGRanges-class.Rd b/man/hasGRanges-class.Rd deleted file mode 100644 index 1a3bdbe..0000000 --- a/man/hasGRanges-class.Rd +++ /dev/null @@ -1,99 +0,0 @@ -\name{hasGRanges-class} -\Rdversion{1.1} -\docType{class} -\alias{class:hasGRanges} -\alias{hasGRanges-class} -\alias{hasGRanges} -\alias{seqnames,hasGRanges-method} -\alias{seqnames<-,hasGRanges-method} -\alias{seqlevels,hasGRanges-method} -\alias{seqlevels<-,hasGRanges-method} -\alias{seqlengths,hasGRanges-method} -\alias{seqlengths<-,hasGRanges-method} -\alias{granges,hasGRanges-method} -\alias{start,hasGRanges-method} -\alias{start<-,hasGRanges-method} -\alias{end,hasGRanges-method} -\alias{end<-,hasGRanges-method} -\alias{width,hasGRanges-method} -\alias{width<-,hasGRanges-method} -\alias{strand,hasGRanges-method} -\alias{strand<-,hasGRanges-method} -\alias{strand<-,hasGRanges,ANY-method} -\alias{length,hasGRanges-method} -\alias{[,hasGRanges-method} -\alias{[,hasGRanges,ANY,ANY,ANY-method} -\alias{findOverlaps,hasGRanges,GenomicRanges-method} -\alias{findOverlaps,GenomicRanges,hasGRanges-method} -\alias{findOverlaps,hasGRanges,hasGRanges-method} -\alias{overlapsAny,hasGRanges,GenomicRanges-method} -\alias{overlapsAny,GenomicRanges,hasGRanges-method} -\alias{overlapsAny,hasGRanges,hasGRanges-method} -\alias{subsetByOverlaps,hasGRanges,GenomicRanges-method} -\alias{subsetByOverlaps,GenomicRanges,hasGRanges-method} -\alias{subsetByOverlaps,hasGRanges,hasGRanges-method} - -\title{Class hasGRanges} -\description{ - A class with a GRanges slot, used as a building block for other - classes. Provides basic accessor functions etc. -} -\section{Objects from the Class}{ -Objects can be created by calls of the form \code{new("hasGRanges", ...)}. -} -\section{Slots}{ - \describe{ - \item{\code{gr}:}{Object of class \code{GRanges}.} - } -} -\section{Methods}{ - \describe{ - \item{"["}{Subsets a single dimension.} - \item{granges}{Get the \code{GRanges} object representing - genomic locations.} - \item{start,start<-,end,end<-,width,width<-}{Start, end and width - for the genomic locations of the object, also replacement - functions. This accessor functions operate directly on the - \code{gr} slot.} - \item{strand,strand<-}{Getting and setting the - \code{strand} of the genomic locations (the \code{gr} slot).} - \item{seqlengths,seqlengths<-}{Getting and setting the - \code{seqlengths} of the genomic locations (the \code{gr} slot).} - \item{seqlevels,seqlevels<-}{Getting and setting the - \code{seqlevels} of the genomic locations (the \code{gr} slot).} - \item{seqnames,seqnames<-}{Getting and setting the - \code{seqnames} of the genomic locations (the \code{gr} slot).} - \item{show}{The show method.} - \item{findOverlaps}{\code{(query = "hasGRanges", subject = - "hasGRanges")}: finds overlaps between the \code{granges()} of - the two objects.} - \item{findOverlaps}{\code{(query = "GenomicRanges", subject = - "hasGRanges")}: finds overlaps between query and the \code{granges()} of - the subject.} - \item{findOverlaps}{\code{(query = "hasGRanges", subject = - "GenomicRanges")}: finds overlaps between the \code{granges()} - of the query and the subject.} - \item{subsetByOverlaps}{\code{(query = "hasGRanges", subject = - "hasGRanges")}: Subset the query, keeping the genomic locations that - overlaps the subject.} - \item{subsetByOverlaps}{\code{(query = "hasGRanges", subject = - "GenomicRanges")}: Subset the query, keeping the genomic - locations that overlaps the subject.} - \item{subsetByOverlaps}{\code{(query = "GenomicRanges", - subject = "hasGRanges")}: Subset the query, keeping the genomic - locations that overlaps the subject.} - } -} -\author{ - Kasper Daniel Hansen \email{khansen@jhsph.edu} -} -\note{ - If you extend the \code{hasGRanges} class, you should consider writing - a subset method (\code{[}), and a \code{show} method. If the new - class supports single index subsetting, the \code{subsetByOverlaps} - methods will automatically extend. -} -\examples{ -showClass("hasGRanges") -} -\keyword{classes} diff --git a/man/internals.Rd b/man/internals.Rd deleted file mode 100644 index 4f5edbd..0000000 --- a/man/internals.Rd +++ /dev/null @@ -1,12 +0,0 @@ -\name{Internals} -\alias{matrixOrNULL-class} -\title{Internals} -\description{ - The \code{matrixOrNULL} class is a class union, representing a slot - which is either a matrix or \code{NULL} (representing missing - information). -} -\value{ - Undocumented -} -\keyword{internal}