[Bioc-devel] Virtual class for `matrix` and `DelayedArray`? (or better strategy for dealing with them both)
Martin Morgan
martin.morgan at roswellpark.org
Mon Apr 30 17:28:02 CEST 2018
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 <
> 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]]
>
> _______________________________________________
> Bioc-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>
This email message may contain legally privileged and/or...{{dropped:2}}
More information about the Bioc-devel
mailing list