Hi Michael,

Thank you for this work and the explanation.  It’s good to know that my problem 
will feed back into improvements in the methods package.

I opted for a simpler workaround, for now, renaming my abstract class to avoid 
the collision.  

 - Paul

> On May 8, 2018, at 8:25 AM, Michael Lawrence <lawrence.mich...@gene.com> 
> wrote:
> 
> Thanks Paul.
> 
> I've made improvements to the methods package so that there will no longer be 
> any messages about AnnotationTrack being duplicated, but I'll need to work 
> through some failures this is causing in tests.
> 
> The first issue is interesting though. Since Gviz defines an initialize() for 
> AnnotationTrack, dispatch ends up using that intsead of the default. That 
> method (incorrectly in my opinion) silently drops unrecognized arguments in 
> "..." so it is effectively a no-op. Ideally the method would eventually call 
> callNextMethod(). Not doing so makes assumptions about how the parent object 
> is initialized. It would also make this case work, just by luck. This is one 
> reason why defining initialize() methods is tricky and should be avoided.
> 
> Unfortunately, the methods package will dispatch to a method, regardless of 
> the package of origin, unless there are methods with signatures containing 
> two or more classes of the same name.  This might be easy to fix but there 
> could be performance regressions. This problem will happen all the time if 
> there are initialize() methods around. You should be able to avoid this just 
> by defining your own initialize() method that just calls the next method. 
> Ideally though Gviz would just drop its one.
> 
> Michael
> 
> On Mon, May 7, 2018 at 11:14 AM, Paul Shannon 
> <paul.thurmond.shan...@gmail.com> wrote:
> Hi Michael,
> 
> > On May 4, 2018, at 1:36 PM, Michael Lawrence <lawrence.mich...@gene.com> 
> > wrote:
> > 
> > Do you have a reproducible example of this? It's probably a bug in the 
> > methods package.
> > 
> 
> Sorry I did not get to this sooner.  Here are two symptoms of the cache class 
> name collision:
> 
>    1) igvR::displayTrack, if called after motifbreakR::plotMB, fails (see 
> error message below)
>    2) plotMB, if called after igvR is loaded, reports the class name 
> collision.
> 
> - Paul
> 
> library(SNPlocs.Hsapiens.dbSNP150.GRCh38)
> library(BSgenome.Hsapiens.UCSC.hg38)
> library(motifbreakR)
> 
> snp <- "rs12050029"
> 
> snps.gr <- snps.from.rsid(rsid = snp,
>                           dbSNP=SNPlocs.Hsapiens.dbSNP150.GRCh38,
>                           search.genome=BSgenome.Hsapiens.UCSC.hg38)
> 
> 
> results <- motifbreakR(snpList = snps.gr, filterp = TRUE,
>                        pwmList = query(MotifDb, "jaspar2018"),
>                        threshold = 1e-4,
>                        method = "ic",
>                        bkg = c(A=0.25, C=0.25, G=0.25, T=0.25),
>                        BPPARAM = BiocParallel::bpparam("SerialParam"))
> 
> plotMB(results = results, rsid = snp, effect = c("weak", "strong"))
> 
> 
> library(igvR)
> igv <- igvR()
> setGenome(igv, "hg38")
> snp.track <- GRangesAnnotationTrack("snp", snps.gr, color="red")
> displayTrack(igv, snp.track)
> 
>    # this error is only seen if motifbreakR - and thus Gviz - have been loaded
>    # otherwise, displayTrack works fine
>    # Error in if (trackType == "variant" && source == "file" && fileFormat == 
>  :
>    #  missing value where TRUE/FALSE
> 
> plotMB(results = results, rsid = snp, effect = c("weak", "strong"))
> 
>    # Found more than one class "AnnotationTrack" in cache; using the first, 
> from namespace 'Gviz'
>    # Also defined by 'igvR'
>    # Found more than one class "AnnotationTrack" in cache; using the first, 
> from namespace 'Gviz'
>    # Also defined by 'igvR'
>    # Found more than one class "AnnotationTrack" in cache; using the first, 
> from namespace 'Gviz'
>    # Also defined by 'igvR'
>    # Found more than one class "AnnotationTrack" in cache; using the first, 
> from namespace 'Gviz'
>    # Also defined by 'igvR'
>    # Found more than one class "AnnotationTrack" in cache; using the first, 
> from namespace 'Gviz'
>    # Also defined by 'igvR'
>    # Found more than one class "AnnotationTrack" in cache; using the first, 
> from namespace 'Gviz'
>    # Also defined by 'igvR'
> 
> 
> 
> 
> 
> > Michael
> > 
> > On Fri, May 4, 2018 at 10:52 AM, Paul Shannon 
> > <paul.thurmond.shan...@gmail.com> wrote:
> > I just discovered a class name collision - AnnotationTrack, in Gviz and my 
> > new package igvR.   wish to get wise counsel before proceeding with a fix.  
> > Here’s the error message:
> > 
> >    Found more than one class "AnnotationTrack" in cache; 
> >    using the first, from namespace ‘igvR' Also defined by ‘Gviz’
> > 
> > AnnotationTrack is an abstract base class in my new package igvR.  The 
> > concrete derived classes at present are
> > 
> >   DataFrameAnnotationTrack
> >   GRangesAnnotationTrack
> >   UCSCBedAnnotationTrack
> > 
> > It would be easy for me to rename AnnotationTrack to 
> > “GenomeAnnotationTrack” or even “igvAnnotationTrack”, thereby  avoiding the 
> > name clash.  
> > 
> > Reasonable?  Fix in both release and devel?
> > 
> > Thanks -
> > 
> >  - Paul
> > 
> > _______________________________________________
> > Bioc-devel@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/bioc-devel
> > 
> > 
> 
> 
> 

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

Reply via email to