A simple approach is to suppress the message (I think this is pragmatic, rather than dumb __) about unknown class (along with DESCRIPTION Suggests: Seurat)
setGeneric("getGE", function(x) standardGeneric("getGE")) suppressMessages({ setMethod("getGE", "seurat", function(x) Seurat::GetAssayData(x)) }) One fun thing to try is use hooks for package load; I would say that this is rarely used so may have surprising issues... Note the need to specify the location of the generic `PkgA::getGE` and that the method is defined in the global environment, rather than in the package environment, so would not have access to non-exported functions. The DESCRIPTION file has Suggests: Seurat Something along the lines of setGeneric("getGE", function(x) standardGeneric("getGE")) .onLoad <- function(...) { if ("Seurat" %in% loadedNamespaces()) { setMethod( getGE, "seurat", function(x) Seurat::GetAssayData(x) ) } else { setHook( packageEvent("Seurat", "onLoad"), function(...) { setMethod( PkgA::getGE, "seurat", function(x) Seurat::GetAssayData(x), where = .GlobalEnv ) } ) } } Martin On 1/29/19, 9:27 PM, "Bioc-devel on behalf of Brendan Innes" <bioc-devel-boun...@r-project.org on behalf of brendan.in...@mail.utoronto.ca> wrote: Hi friendly Bioc gang! I'm struggling with what seems like a silly problem. I'm trying to write a simple wrapper S4 generic that accesses the data slot of various S4 objects (seurat and SingleCellExperiment objects). So the generic is: setGeneric("getGE",function(x) standardGeneric("getGE")) And the methods are: setMethod("getGE","seurat", function(x) Seurat::GetAssayData(x)) setMethod("getGE","SingleCellExperiment", function(x) SingleCellExperiment::logcounts(x)) Problem is that when I install the package, I get the warning > in method for �getGE� with signature �"seurat"�: no definition for class �seurat� This isn't surprising, since Seurat isn't imported, but I don't want the user to have to import it if their data is in a SingleCellExperiment object. The function still seems to work fine if I attach Seurat and load a seurat object, so I'm tempted to just suppress the error (but darned if I know how to do that either). Before I do something so rash, does anyone have a suggestion for a less dumb way to do this? Thanks so much! Brendan www.baderlab.org/BrendanInnes<http://www.baderlab.org/BrendanInnes> [[alternative HTML version deleted]] _______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel