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] class name collision in cache: igvR and Gviz
7 messages · Paul Shannon, Hervé Pagès, Michael Lawrence
Hi Paul, Luckily you caught this only 3 days after the release so renaming the class now is probably ok and shouldn't be disruptive. Cheers, H.
On 05/04/2018 10:52 AM, Paul Shannon 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 at 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_wJYbW0WYiZvSXAJJKaaPhzWA&m=LKMPMJT3dPT3MzP89-SrXj7WE68ASStRykpsAASpDJU&s=l2WFtbtf4nCVcoygg5Eob_wu-Q4qfETzWYAA_f9-mKc&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 at fredhutch.org Phone: (206) 667-5791 Fax: (206) 667-1319
Do you have a reproducible example of this? It's probably a bug in the methods package. Thanks, Michael On Fri, May 4, 2018 at 10:52 AM, Paul Shannon <
paul.thurmond.shannon at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
2 days later
Hi Michael,
On May 4, 2018, at 1:36 PM, Michael Lawrence <lawrence.michael at 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.shannon at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
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.shannon at gmail.com> wrote:
Hi Michael,
On May 4, 2018, at 1:36 PM, Michael Lawrence <lawrence.michael at 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.shannon at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
1 day later
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.michael at 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.shannon at gmail.com> wrote: Hi Michael,
On May 4, 2018, at 1:36 PM, Michael Lawrence <lawrence.michael at 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.shannon at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel
1 day later
I pushed a fix into R devel. On Wed, May 9, 2018 at 8:56 AM, Paul Shannon <
paul.thurmond.shannon at gmail.com> wrote:
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.michael at 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.shannon at gmail.com> wrote:
Hi Michael,
On May 4, 2018, at 1:36 PM, Michael Lawrence <
lawrence.michael at 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.shannon at 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel