Hi, is there away to assure that a package is detached when R quits? I know about .Last(), but that requires the user to setup that function. What I am looking for is a way for the package to do this itself, without asking the user to edit "their" .Last(). From ?setHook I know that:
"...when an R is finished, packages are not detached and namespaces are not unloaded, so the corresponding hooks will not be run." I am going to use this to load settings from file when a package loads and automatically save (by optionally prompting the user) them back to file when the package is no longer available (==detached/unloaded/R quits). I am currently loading the settings in .First.lib() and have code in .Last.lib() to save them. Are there other ways to assure functions to be called when R quits? The best I can think of now is to "hack" .Last() by doing something like if (!exists(".LastOriginal", mode="function")) { .LastOriginal <<- get(".Last", envir=.GlobalEnv); .Last <<- function(..., envir=parent.frame()) { for (fun in getHook(".Last")) { if (is.character(fun)) fun <- get(fun, mode="function") try(fun()); } eval(.LastOriginal(...), envir=envir); } # .Last() } Then in package <pkg>: .First.lib <- function(libname, pkgname) { # Detach package when R finishes. setHook(".Last", function(...) { pos <- match(paste("package:", pkgname, sep=""), search()); if (!is.na(pos)) detach(pos=pos); }) } However, this will be broken if user redefines .Last(). What about defining a hook "onSessionExit" to be called before (after?) .Last() is called. In analogue to on.exit() one could then define onSessionExit <- function(fcn, ...) { setHook("onSessionExit", fcn, ...); } Just curious, the above quote makes me wonder what is the rational for the behavior? Was it made on purpose or is it simply just easier for R to finish without detaching/unloading packages first? In what situations to you have "clean-up" code for a package that is only called when detach("package:<pkg>") is used? One situation I can imaging is when a bundle of packages are loaded and when you detach the package that all other packages requires, the other packages are also detached for conveniency. Best wishes Henrik ______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel