On Thu, Dec 8, 2011 at 2:52 PM, Martin Morgan <mtmor...@fhcrc.org> wrote: > This bug appears intermittently in R CMD check when reference classes have > finalize methods. The problem is that garbage collection can be run after > the methods package is no longer available. It affects (periodically) the > Bioconductor AnnotationDbi package as well as packages that contain Rcpp > classes. To reproduce: > > library(methods) > a = setRefClass("A", methods=list(finalize=function() cat("A\n"))) > b = setRefClass("B", contains="A") > > repeat b = setRefClass("B", contains="A") until finalize does not run (no > garbage collection triggered during setRefClass) > > b = setRefClass("B", contains="A") > b = setRefClass("B", contains="A") > > and then > >> detach("package:methods") >> gc() > Error in function (x) : attempt to apply non-function > Error in function (x) : attempt to apply non-function > >> traceback() > 1: function (x) > x$.self$finalize()(<environment>) > > I believe a variant of the same type of problem generates an error > > Error in function (x) : no function to return from, jumping to top level > > also seen in AnnotationDbi and Rcpp packages
Here is a self-contained reproducible example that immediately and consistently produces the error on R 2.14 and R-devel: library(methods) a = setRefClass("A", methods=list(finalize=function() options("finalized"=TRUE))) b = setRefClass("B", contains="A") while (TRUE) { options("finalized" = FALSE) b = setRefClass("B", contains="A") if (!getOption("finalized")) break } detach("package:methods") gc() Thanks! Dan > -- > Computational Biology > Fred Hutchinson Cancer Research Center > 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 > > Location: M1-B861 > Telephone: 206 667-2793 > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel