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