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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to