[Rd] reg.finalizer(..., add=FALSE)?

Duncan Murdoch murdoch at stats.uwo.ca
Wed Jul 8 03:20:11 CEST 2009


On 07/07/2009 8:36 PM, Henrik Bengtsson wrote:
> Is it possible to (i) clear or (ii) override already registered
> finalizer functions, e.g. reg.finalizer(e, f, add=FALSE) cf.
> on.exit(..., add=FALSE)?

No, but you can have the finalizer function call something else, and 
change the thing it calls.  E.g.

reg.finalizer(env, function (...) CleanUp(...))

will call CleanUp in the global environment (the environment of the 
anonymous finalizer); change that function and the cleanup behaviour 
will change.

Duncan Murdoch

> 
> Currently:
> 
>> env <- new.env()
>> reg.finalizer(env, function(...) cat("Finalizer A!\n"))
> NULL
>> reg.finalizer(env, function(...) cat("Finalizer B!\n"))
> NULL
>> reg.finalizer(env, function(...) cat("Finalizer C!\n"))
> NULL
>> gc()
>          used (Mb) gc trigger (Mb) max used (Mb)
> Ncells 115827  3.1     350000  9.4   350000  9.4
> Vcells  77109  0.6     786432  6.0   370917  2.9
>> rm(env)
>> gc()
> Finalizer C!
> Finalizer B!
> Finalizer A!
>          used (Mb) gc trigger (Mb) max used (Mb)
> Ncells 115932  3.1     350000  9.4   350000  9.4
> Vcells  77648  0.6     786432  6.0   370917  2.9
> 
> I wish to have only finalizer "C" to run.
> 
> /Henrik
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list