[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bioc-devel
Subject:    Re: [Bioc-devel]  SetMethod to dispatch on class in unattached package
From:       Michael Lawrence via Bioc-devel <bioc-devel () r-project ! org>
Date:       2019-01-31 3:42:34
Message-ID: CAOQ5NyfDk5LZ+G4nE6g3K_aM_Tcq_A=4rxK_9GmgfZTF7d-f5Q () mail ! gmail ! com
[Download RAW message or body]

Hopefully it could be implemented with minimal bloat, but I get your
point. The intent is to clarify the source of the class, since it
would not otherwise be imported. I think this is a fairly common case
that is worth solving if it doesn't add too much complexity.

On Wed, Jan 30, 2019 at 2:31 PM Pages, Herve <hpages@fredhutch.org> wrote:
> 
> Hi Michael,
> 
> So IIUC this upfront class registration wouldn't do much beside making
> the "no definition for class 'seurat'" message issued by setMethod
> disappear. Maybe that's not enough to justify adding more bloat to the
> methods package?
> 
> My 2 cents,
> 
> H.
> 
> 
> On 1/30/19 13:35, Michael Lawrence via Bioc-devel wrote:
> > Unrelated to the specific question, a generic function introduces more
> > vocabulary into the ecosystem. Since SingleCellExperiment defines the
> > standard interface, why not make a new method on logcounts()?
> > 
> > Back on topic, what if the methods package were to support forward
> > class declarations? For example,
> > 
> > setExternalClass("seurat", package="seurat")
> > 
> > I have no idea how to implement that, but perhaps we could at least
> > agree on the API. Honestly, it may be that just some dummy class would
> > work for method registration. But it's nice to be explicit and to list
> > the source package, even if nothing is formally checked.
> > 
> > Michael
> > 
> > 
> > 
> > On Wed, Jan 30, 2019 at 12:41 PM Brendan Innes
> > <brendan.innes@mail.utoronto.ca> wrote:
> > > Thanks Martin!
> > > 
> > > 
> > > The fun strategy (zzz.R .onLoad setHook trick) worked well, except for setting \
> > > this particular method: 
> > > 
> > > setMethod(scClustViz::getDR,"SingleCellExperiment",function(x,DRtype) {
> > > if (any(grepl(DRtype,SingleCellExperiment::reducedDimNames(x),ignore.case=T))) \
> > > { SingleCellExperiment::reducedDim(x,grep(DRtype,
> > > SingleCellExperiment::reducedDimNames(x),
> > > ignore.case=T,value=T))
> > > } else {
> > > stop(paste(paste0("DRtype '",DRtype,"' not found."),
> > > "The following cell embeddings are available in this object:",
> > > paste0(SingleCellExperiment::reducedDimNames(x),collapse=", "),
> > > sep="\n  "))
> > > }
> > > },
> > > where=.GlobalEnv)
> > > 
> > > 
> > > which gives the following error when SingleCellExperiment is loaded:
> > > 
> > > Error in as.vector(x, "character") :
> > > cannot coerce type 'closure' to vector of type 'character'
> > > 
> > > 
> > > But if I just run that code, it doesn't give the error.  I thought this might \
> > > be due to where in the order of loading and attaching namespaces the hook is \
> > > running, but changing the packageEvent event to "attach" makes no difference. 
> > > 
> > > Anyway, suppressing the message works, so I'm happy.  Just wanted to report \
> > > back on the partial success of doing it the cool way, in case anyone was \
> > > interested. 
> > > 
> > > Thanks again!
> > > 
> > > Brendan
> > > 
> > > 
> > > www.baderlab.org/BrendanInnes<https://urldefense.proofpoint.com/v2/url?u=http-3A \
> > > __www.baderlab.org_BrendanInnes&d=DwIFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvime \
> > > WdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=HwMn126h-7G4XmAqvYBr8lGjzQbgLqGq4-KkAOUH9r0&s=OIIsBqppQCVjbRlE5mpw0XnWEc-hiPwpjOCLNdiu4Mg&e=>
> > >  
> > > ________________________________
> > > From: Martin Morgan <mtmorgan.bioc@gmail.com>
> > > Sent: Wednesday, January 30, 2019 12:16:20 PM
> > > To: Brendan Innes; bioc-devel@r-project.org
> > > Subject: Re: [Bioc-devel] SetMethod to dispatch on class in unattached package
> > > 
> > > 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-bounces@r-project.org on behalf of brendan.innes@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<https://urldefense.proofpoint.com/v2/url?u=http-3A \
> > > __www.baderlab.org_BrendanInnes&d=DwIFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvime \
> > > WdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=HwMn126h-7G4XmAqvYBr8lGjzQbgLqGq4-KkAOUH9r0&s= \
> > > OIIsBqppQCVjbRlE5mpw0XnWEc-hiPwpjOCLNdiu4Mg&e=<https://urldefense.proofpoint.com \
> > > /v2/url?u=http-3A__www.baderlab.org_BrendanInnes&d=DwIFaQ&c=eRAMFD45gAfqt84VtBcf \
> > > hQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=HwMn126h-7G4XmAqvYBr8lGjzQbgL \
> > > qGq4-KkAOUH9r0&s=OIIsBqppQCVjbRlE5mpw0XnWEc-hiPwpjOCLNdiu4Mg&e=<https://urldefen \
> > > se.proofpoint.com/v2/url?u=http-3A__www.baderlab.org_BrendanInnes&d=DwIFaQ&c=eRA \
> > > MFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=HwMn126h-7G4 \
> > > XmAqvYBr8lGjzQbgLqGq4-KkAOUH9r0&s=OIIsBqppQCVjbRlE5mpw0XnWEc-hiPwpjOCLNdiu4Mg&e=>>
> > >  
> > > [[alternative HTML version deleted]]
> > > 
> > > 
> > > 
> > > [[alternative HTML version deleted]]
> > > 
> > > _______________________________________________
> > > Bioc-devel@r-project.org mailing list
> > > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listin \
> > > fo_bioc-2Ddevel&d=DwIFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYi \
> > > ZvSXAJJKaaPhzWA&m=HwMn126h-7G4XmAqvYBr8lGjzQbgLqGq4-KkAOUH9r0&s=S3iJCS0wxwSgW8YdRpf-Oz4KO8Kkr-lSLX5yaziTTOA&e=
> > > 
> > _______________________________________________
> > Bioc-devel@r-project.org mailing list
> > https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo \
> > _bioc-2Ddevel&d=DwIFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSX \
> > AJJKaaPhzWA&m=HwMn126h-7G4XmAqvYBr8lGjzQbgLqGq4-KkAOUH9r0&s=S3iJCS0wxwSgW8YdRpf-Oz4KO8Kkr-lSLX5yaziTTOA&e=
> > 
> 
> --
> Hervé Pagès
> 
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
> 
> E-mail: hpages@fredhutch.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319
> 

_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic