E.g., as in a package containing just the following R code: $ cat testFinalizer/R/zzz.R envir <- new.env() cleanup <- function(e) { message("cleanup(", format(e), ")") if (!isTRUE(envir$cleaned)) { message(" cleaning ", format(e)) envir$cleaned <- TRUE } else { # cleanup previously called by .onUnload() message(" ", format(e), " has already been cleaned") } } .onLoad <- function(libname, pkgname) { message("Loading ", pkgname, " from ", libname) reg.finalizer(e=envir, f=cleanup, onexit=TRUE) message("Installed finalizer for ", format(envir)) } .onUnload <- function(libpath) { message("Unloading ", libpath) cleanup(envir) }
This gives: $ R --quiet > library(testFinalizer,lib="lib") Loading testFinalizer from /home/bill/packages/lib Installed finalizer for <environment: 0x55a558b16120> > detach("package:testFinalizer", unload=TRUE) Unloading /home/bill/packages/lib/testFinalizer cleanup(<environment: 0x55a558b16120>) cleaning <environment: 0x55a558b16120> > q("no") cleanup(<environment: 0x55a558b16120>) <environment: 0x55a558b16120> has already been cleaned $ R --quiet > library(testFinalizer, lib="lib") Loading testFinalizer from /home/bill/packages/lib Installed finalizer for <environment: 0x55f8dac2d598> > objects(all=TRUE) character(0) > q("no") cleanup(<environment: 0x55f8dac2d598>) cleaning <environment: 0x55f8dac2d598> On Fri, Dec 18, 2020 at 7:39 AM Bill Dunlap <williamwdun...@gmail.com> wrote: > Have you tried using reg.finalizer(..., onexit=TRUE)? > > -BIll > > On Fri, Dec 18, 2020 at 7:29 AM Jiefei Wang <szwj...@gmail.com> wrote: > >> Hi, >> >> I am looking for a way to clean up my package resources before R is ended. >> It looks like the .onUnload function would not be helpful as it would not >> be called before R is ended. This behavior has been described in the >> document: >> >> *Note that packages are not detached nor namespaces unloaded at the end of >> an R session unless the user arranges to do so (e.g., via .Last).* >> >> I have also searched for ?.Last as the document says. However, the .Last >> function is for the end user to use, not for the package developers, so I >> am clueless now. How to clean up my package before R ends? Any >> suggestions? >> >> Best, >> Jiefei >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.