[Rd] Reference class finalize() fails with 'attempt to apply non-function'
Dan Tenenbaum
dtenenba at fhcrc.org
Thu Dec 29 20:35:25 CET 2011
On Thu, Dec 8, 2011 at 2:52 PM, Martin Morgan <mtmorgan at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list