But that issue will be fixed, so Tim's advice is inappropriate.
On 04/30/2018 10:42 AM, Tim Triche, Jr. wrote:
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 <
epur...@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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel
[[alternative HTML version deleted]]
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel
This email message may contain legally privileged and/or...{{dropped:2}}
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel