[Bioc-devel] Found more than one class "Annotated" in cache
davide risso
risso.davide at gmail.com
Fri Apr 29 19:26:19 CEST 2016
Hi all,
when running R CMD check on our package, we get the following warning:
checking whether the namespace can be unloaded cleanly ... WARNING
---- unloading
Error in .getClassFromCache(what, resolve.confl = "all") :
argument "where" is missing, with no default
Calls: unloadNamespace ... <Anonymous> -> .removeSuperclassBackRefs ->
.getClassFromCache
Execution halted
Is this warning related to the message mentioned earlier in this thread? If
so, should I expect this warning to go away once the bug in the class
import is fixed?
Here for the full Travis CI report:
https://travis-ci.org/epurdom/clusterExperiment/builds/126175973
Thanks,
Davide
On Mon, Apr 25, 2016 at 2:00 PM davide risso <risso.davide at gmail.com> wrote:
> Thank you Michael and Martin for looking into this!
>
> Best,
> davide
>
>
> On Mon, Apr 25, 2016 at 1:49 PM Michael Lawrence <
> lawrence.michael at gene.com> wrote:
>
>> Yes, that's a better fix for this in principle, since it uses the
>> information encoded in the extends object, although I think
>> getClassFromCache() also needs to be fixed, so that getClassDef() sees
>> only the imported classes when only given "where". That's a more
>> general fix that works in both load orders.
>>
>> Maybe the superClass slot of the extends object should store its
>> package? Would be convenient, if somewhat redundant. Conceptually, it
>> seems the package really belongs on superClass, not on the extends
>> object itself (how does a ClassExtends pertain to a package?).
>>
>> Index: ClassExtensions.R
>> ===================================================================
>> --- ClassExtensions.R (revision 70547)
>> +++ ClassExtensions.R (working copy)
>> @@ -316,6 +316,7 @@
>> stop(gettextf("the 'replace' argument to setIs() should be a
>> function of 2 or 3 arguments, got an object of class %s",
>> dQuote(class(replace))), domain = NA)
>>
>> + packageSlot(to) <- package
>> new(extClass, subClass = Class, superClass = to, package = package,
>> coerce = coerce, test = test, replace = replace, simple = simple,
>> by = by, dataPart = dataPart, distance = distance)
>>
>>
>>
>> On Mon, Apr 25, 2016 at 1:24 PM, Martin Morgan
>> <martin.morgan at roswellpark.org> wrote:
>> >
>> >
>> > On 04/25/2016 03:53 PM, Michael Lawrence wrote:
>> >>
>> >> Yea, this is a bug in R, in my opinion. The class cache circumvents
>> >> the namespace imports. In my working copy I've fixed it by falling
>> >> back to the namespace search when there are multiple hits. That at
>> >> least fixes this case.
>> >
>> >
>> > This also fixes it
>> >
>> > Index: src/library/methods/R/SClasses.R
>> > ===================================================================
>> > --- src/library/methods/R/SClasses.R (revision 70547)
>> > +++ src/library/methods/R/SClasses.R (working copy)
>> > @@ -524,7 +524,7 @@
>> > superClass <- exti at superClass
>> > if(!exti at simple && !is(object, superClass))
>> > next ## skip conditional relations that don't hold for this
>> > object
>> > - superDef <- getClassDef(superClass, where = where)
>> > + superDef <- getClassDef(superClass, package = packageSlot(exti))
>> > if(is.null(superDef)) {
>> > errors <- c(errors,
>> > paste0("superclass \"", superClass,
>> >
>> >
>> > There's another problem seen by loading the packages in reverse order
>> >
>> >> suppressPackageStartupMessages({ library(RNeXML);
>> library(GenomicRanges)
>> >> })
>> > Found more than one class "Annotated" in cache; using the first, from
>> > namespace 'RNeXML'
>> > Also defined by 'S4Vectors'
>> > ...
>> >
>> > which is from
>> >
>> > [[17]]
>> > S4Vectors:::setDefaultSlotValue("XRaw", "shared", new("SharedRaw"),
>> > where = asNamespace(pkgname))
>> >
>> > [[18]]
>> > resetClass(classname, classdef, where = where)
>> >
>> > [[19]]
>> > completeClassDefinition(Class, classDef, where)
>> >
>> > [[20]]
>> > .completeClassSlots(ClassDef, where)
>> >
>> > [[21]]
>> > isClass(eClass, where = where)
>> >
>> > [[22]]
>> > getClassDef(Class, where)
>> >
>> > [[23]]
>> > .getClassFromCache(Class, where, package = package, resolve.msg =
>> > resolve.msg)
>> >
>> > but I haven't quite got to the bottom of that. Also, I think these are
>> both
>> > different from but related to
>> >
>> >> suppressPackageStartupMessages(library(Statomica))
>> > Error in .mergeMethodsTable(generic, mtable, tt, attach) :
>> > trying to get slot "defined" from an object of a basic class ("list")
>> with
>> > no slots
>> > Error: package or namespace load failed for 'Statomica'
>> >
>> >
>> >>
>> >> You can disable the message in the short term by setting the
>> >> "getClass.msg" option to FALSE.
>> >>
>> >> Michael
>> >>
>> >> On Sun, Apr 24, 2016 at 12:50 PM, davide risso <risso.davide at gmail.com
>> >
>> >> wrote:
>> >>>
>> >>> Dear list,
>> >>>
>> >>> we are developing a new package that defines a class that builds on
>> >>> SummarizedExperiment and also imports the CRAN package phylobase.
>> >>>
>> >>> The class "Annotated" is defined both in the S4Vectors package (a
>> >>> dependency of SummarizedExperiment) and in the RNeXML package (a
>> >>> dependency
>> >>> of phylobase). Note that we want the former. This causes the following
>> >>> message to be thrown every time we create a new object.
>> >>>
>> >>> Found more than one class "Annotated" in cache; using the first, from
>> >>> namespace 'S4Vectors'
>> >>>
>> >>>
>> >>> A minimal example is the following.
>> >>>
>> >>>> library(SummarizedExperiment)> SummarizedExperiment()class:
>> >>>> SummarizedExperiment
>> >>>
>> >>> dim: 0 0
>> >>> metadata(0):
>> >>> assays(0):
>> >>> rownames: NULL
>> >>> rowData names(0):
>> >>> colnames: NULL
>> >>> colData names(0):> library(phylobase)> SummarizedExperiment()Found
>> >>> more than one class "Annotated" in cache; using the first, from
>> >>> namespace 'S4Vectors'class: SummarizedExperiment
>> >>> dim: 0 0
>> >>> metadata(0):
>> >>> assays(0):
>> >>> rownames: NULL
>> >>> rowData names(0):
>> >>> colnames: NULL
>> >>> colData names(0):
>> >>>
>> >>>> sessionInfo()R Under development (unstable) (2016-03-07 r70284)
>> >>>
>> >>> Platform: x86_64-pc-linux-gnu (64-bit)
>> >>> Running under: Debian GNU/Linux stretch/sid
>> >>>
>> >>> locale:
>> >>> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
>> >>> LC_TIME=en_US.UTF-8
>> >>> [4] LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8
>> >>> LC_MESSAGES=en_US.UTF-8
>> >>> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
>> >>> LC_ADDRESS=C
>> >>> [10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8
>> >>> LC_IDENTIFICATION=C
>> >>>
>> >>> attached base packages:
>> >>> [1] stats4 parallel stats graphics grDevices utils
>> >>> datasets methods
>> >>> [9] base
>> >>>
>> >>> other attached packages:
>> >>> [1] phylobase_0.8.2 SummarizedExperiment_1.1.21
>> >>> [3] Biobase_2.31.3 GenomicRanges_1.23.23
>> >>> [5] GenomeInfoDb_1.7.6 IRanges_2.5.39
>> >>> [7] S4Vectors_0.9.41 BiocGenerics_0.17.3
>> >>>
>> >>> loaded via a namespace (and not attached):
>> >>> [1] Rcpp_0.12.3 plyr_1.8.3 XVector_0.11.7
>> iterators_1.0.8
>> >>> [5] tools_3.3.0 zlibbioc_1.17.0 uuid_0.1-2
>> jsonlite_0.9.19
>> >>> [9] nlme_3.1-125 lattice_0.20-33 foreach_1.4.3 DBI_0.3.1
>> >>> [13] httr_1.1.0 stringr_1.0.0 dplyr_0.4.3 xml2_0.1.2
>> >>> [17] ade4_1.7-4 grid_3.3.0 rredlist_0.1.0 reshape_0.8.5
>> >>> [21] data.table_1.9.6 R6_2.1.2 XML_3.98-1.4 RNeXML_2.0.6
>> >>> [25] reshape2_1.4.1 tidyr_0.4.1 magrittr_1.5
>> codetools_0.2-14
>> >>> [29] assertthat_0.1 bold_0.3.5 taxize_0.7.5 ape_3.4
>> >>> [33] stringi_1.0-1 rncl_0.6.0 lazyeval_0.1.10 rotl_0.5.0
>> >>> [37] chron_2.3-47
>> >>>
>> >>>
>> >>> Since we need to import both packages, is there a way to explicitly
>> use
>> >>> the
>> >>> correct definition of "Annotated" or to not import the class
>> "Annotated"
>> >>> from RNeXML?
>> >>>
>> >>> Or is this something that could be addressed in the
>> SummarizedExperiment
>> >>> package?
>> >>>
>> >>> These are our DESCRIPTION and NAMESPACE file (note that we are
>> importing
>> >>> only what we need from phylobase):
>> >>> https://github.com/epurdom/clusterExperiment/blob/develop/DESCRIPTION
>> >>> https://github.com/epurdom/clusterExperiment/blob/develop/NAMESPACE
>> >>>
>> >>> See also Henrik's comment at:
>> >>> https://github.com/epurdom/clusterExperiment/issues/66
>> >>>
>> >>> Thank you in advance for any help!
>> >>>
>> >>> Best,
>> >>> davide
>> >>>
>> >>> [[alternative HTML version deleted]]
>> >>>
>> >>> _______________________________________________
>> >>> Bioc-devel at r-project.org mailing list
>> >>> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>> >>>
>> >>
>> >> _______________________________________________
>> >> Bioc-devel at r-project.org mailing list
>> >> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>> >>
>> >
>> >
>> > This email message may contain legally privileged and/or confidential
>> > information. If you are not the intended recipient(s), or the employee
>> or
>> > agent responsible for the delivery of this message to the intended
>> > recipient(s), you are hereby notified that any disclosure, copying,
>> > distribution, or use of this email message is prohibited. If you have
>> > received this message in error, please notify the sender immediately by
>> > e-mail and delete this email message from your computer. Thank you.
>> >
>>
>
[[alternative HTML version deleted]]
More information about the Bioc-devel
mailing list