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

Reply via email to