[Bioc-devel] GenomicFiles: some random issues

Tim Triche, Jr. tim.triche at gmail.com
Mon Sep 29 23:07:04 CEST 2014

Just to support Kasper's proposal, I see this as being broadly useful.

It's really common to be dealing with an object (say, a
SummarizedExperiment-derived doohickey, or a transcriptDb-looking whatzit,
or "bumps", or "dmrcoutput") that has metadata which "looks like" a
GRanges.  More often than not, a generic like

## standardGeneric for "granges" defined from package "GenomicRanges"
granges <- function (x, use.mcols = FALSE, ...) { ... }

gets defined in some derived class and the GenomicRanges generic
specialized to the class.  Or sometimes because of S3-to-S4 impedance
mismatch you instead get

## DMRcate results
setMethod('granges', 'dmrcate.output', function(x, ...) extractRanges(x) )

but the bottom line is that for all of these "things", if they contain a
virtual class like "bsseq::hasGRanges", it enables semi-automatic
extraction of their associated GRanges via the already-in-GenomicRanges
granges() generic.  It seems handy to me, after writing some ungodly number
of kludges to do similar things (see above).

So if ::hasGranges could go into GenomicRanges or biobase or whatever as an
abstract/virtual base class from which to inherit, with a mandatory method
(is it possible to mandate a method for an S4 class?  been a while for me),
then people who just want their intervals could reliably get them from
output that hasGranges.

## what usually seems to happen
foo <- emitWackyClassThatHasSomethingResemblingAGRangesAttachedToIt(x, y, z)

## the part that would be nice
granges(foo) ## since the author made WackyClass contain "hasGranges"

bsseq::hasGranges already defines a number of methods along these lines.
More concretely, and stolen directly from bsseq/R/BSseqTstat_class.R:

setClass("BSseqTstat", contains = "hasGRanges",
         representation(stats = "matrix",
                        parameters = "list")
setValidity("BSseqTstat", function(object) {
    msg <- NULL
    if(length(object at gr) != nrow(object at stats))
        msg <- c(msg, "length of 'gr' is different from the number of rows
of 'stats'")
    if(is.null(msg)) TRUE else msg

That's pretty handy and could stand to be in a very fundamental library

Statistics is the grammar of science.
Karl Pearson <http://en.wikipedia.org/wiki/The_Grammar_of_Science>

On Mon, Sep 29, 2014 at 12:58 PM, Martin Morgan <mtmorgan at fhcrc.org> wrote:

> On 09/28/2014 07:49 PM, Kasper Daniel Hansen wrote:
>> 3. (well, this is GenomicRanges) It seems like GenomicFiles has a lot of
>> similarities with SummarizedExperiment.  I have a lot of use cases for a
>> simple class which has a single GRanges slot, and then support stuff like
>> granges(), start(), end() etc.  Right now I have an implementation in
>> bsseq:hasGRanges, but I think it could be widely useful and fits naturally
>> with SummarizedExperiment.
> Hi Kasper -- not sure what you're trying to say here; sounds like a
> GRanges (!) and bsseq::hasGRanges doesn't exist. Can you clarify please?
> Martin
> --
> Computational Biology / Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N.
> PO Box 19024 Seattle, WA 98109
> Location: Arnold Building M1 B861
> Phone: (206) 667-2793
> _______________________________________________
> Bioc-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel

	[[alternative HTML version deleted]]

More information about the Bioc-devel mailing list