[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