[Bioc-devel] Virtual class for `matrix` and `DelayedArray`? (or better strategy for dealing with them both)
Tim Triche, Jr.
tim.triche at gmail.com
Mon Apr 30 16:42:35 CEST 2018
Don't do that. Seriously, just don't.
https://github.com/Bioconductor/DelayedArray/issues/16
--t
On Mon, Apr 30, 2018 at 10:02 AM, Elizabeth Purdom <
epurdom at stat.berkeley.edu> wrote:
> Hello,
>
> I am trying to extend my package to handle `HDF5Matrix` class ( or more
> generally `DelayedArray`). I currently have S4 functions for `matrix`
> class. Usually I have a method for `SummarizedExperiment`, which will call
> call the method on `assay(x)` and I want the method to be able to deal with
> if `assay(x)` is a `DelayedArray`.
>
> Most of my functions, however, do not require separate code depending on
> whether `x` is a `matrix` or `DelayedArray`. They are making use of
> existing functions that will make that choice for me, e.g. rowMeans or
> subsetting. My goal right now is compatibility, not cleverness, and I'm not
> creating HDF5 methods to handle other cases. (If something doesn't
> currently exist, then I just enclose `x` with `data.matrix` or `as.matrix`
> and call the matrix into memory — for cleanliness and ease in updating with
> appropriate methods in future, I could make separate S4 functions for these
> specific tasks to dispatch, but that's outside of the scope of my
> question). So for simplicity assume I don't really need to dispatch *my
> code* -- that the methods I'm going to use do that.
>
> The natural solution for me seem to use `setClassUnion` and I was
> wondering if such a virtual class already exists? Or is there a better way
> to handle this?
>
> Here's a simple example, using `rowMeans` as my example:
>
> ```
> setGeneric("myNewRowMeans", function(x,...) { standardGeneric("
> myNewRowMeans")})
> setClassUnion("matrixOrDelayed",members=c("matrix", "DelayedArray"))
>
> #' @importFrom DelayedArray rowMeans
> setMethod("myNewRowMeans",
> signature = "matrixOrDelayed",
> definition = function(x,...){
> # a lot of code independent of x
> print("This is a lot of code shared regardless of
> class of x\n")
> # a lot of code that depends on x, but is
> dispatched by the functions called
> out<-rowMeans(x)
> #a lot of code based on output of out
> out<-out+1
> return(out)
> }
> )
> ```
>
> _______________________________________________
> 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