[Bioc-devel] Compatibility of Bioconductor with tidyverse S3 classes/methods

Martin Morgan mtmorg@n@b|oc @end|ng |rom gm@||@com
Fri Feb 7 00:46:51 CET 2020


The idea isn't to use S4 at any cost, but to 'play well' with the Bioconductor ecosystem, including writing robust and maintainable code.

This comment https://github.com/Bioconductor/Contributions/issues/1355#issuecomment-580977106 provides some motivation; there was also an interesting exchange on the Bioconductor community slack about this (join at https://bioc-community.herokuapp.com/; discussion starting with https://community-bioc.slack.com/archives/C35G93GJH/p1580144746014800). The plyranges package http://bioconductor.org/packages/plyranges and recently accepted fluentGenomics workflow https://github.com/Bioconductor/Contributions/issues/1350 provide illustrations.

In your domain it's really surprising that your package does not use (Import or Depend on) SummarizedExperiment or GenomicRanges packages. From a superficial look at your package, it seems like something like `reduce_dimensions()` could be defined to take & return a SummarizedExperiment and hence benefit from some of the points in the github issue comment mentioned above.

Certainly there is a useful transition, both 'on the way in' to a SummarizedExperiment, and after leaving the more specialized bioinformatic computations to, e.g., display a pairs plot of the reduced dimensions, where one might re-shape the data to a tidy format and use 'plain old' tibbles; the fluentGenomics workflow might provide some guidance.

At the end of the day it would not be surprising for Bioconductor packages to make use of tidy concepts and data structures, particularly in the vignette, and it would be a mistake for Bioconductor to exclude well-motivated 'tidy' representations.

Martin Morgan

On 2/6/20, 5:46 PM, "Bioc-devel on behalf of stefano" <bioc-devel-bounces using r-project.org on behalf of mangiolastefano using gmail.com> wrote:

    Hello,
    
    I have a package (ttBulk) under review. I have been told to replace the S3
    system to S4. My package is based on the class tbl_df and must be fully
    compatible with tidyverse methods (inheritance). After some tests and
    research I understood that tidyverse ecosystem is not compatible with S4
    classes.
    
     For example, several methos do not apparently handle S4 objects based on
    S3 tbl_df
    
    ```library(tidyverse)setOldClass("tbl_df")
    setClass("test2", contains = "tbl_df")
    my <- new("test2",  tibble(a = 1))
    my %>%  mutate(b = 3)
    
       a b
    1 1 3
    ```
    
     ```my <- new("test2",  tibble(a = rnorm(100), b = 1))
    my %>% nest(data = -b)
    Error: `x` must be a vector, not a `test2` object
    Run `rlang::last_error()` to see where the error occurred.
    ```
    
    Could you please advise whether a tidyverse based package can be hosted on
    Bioconductor, and if S4 classes are really mandatory? I need to understand
    if I am forced to submit to CRAN instead (although Bioconductor would be a
    good fit, sice I try to interface transcriptional analysis tools to tidy
    universe)
    
    
    Thanks a lot.
    Stefano
    
    	[[alternative HTML version deleted]]
    
    _______________________________________________
    Bioc-devel using r-project.org mailing list
    https://stat.ethz.ch/mailman/listinfo/bioc-devel
    


More information about the Bioc-devel mailing list