[Rd] on.exit called on loading ?

Duncan Murdoch murdoch at stats.uwo.ca
Tue Jan 16 22:39:02 CET 2007


On 1/16/2007 4:02 PM, Dirk Eddelbuettel wrote:
> I just found out that an .onLoad() function such as this stylized one (where
> I just renamed some identifiers)
> 
> 
> .onLoad <- function(lib, pkg) {
>   require(zoo, quiet=TRUE, warn.conflicts=FALSE)
>   library.dynam("foolib", pkg, lib )
>   if (.Platform$OS.type != "windows") {
>     initSomeServices()
>   }
>   if (.Platform$OS.type != "windows") {
>     on.exit(closeSomeServices())
>   }
> }
> 
> actually triggers a call of 'closeSomeServices()'. I am probably
> misunderstanding something here -- but I thought on.exit() would only be
> called on, well, exit ?

It's the exit from the function, not the exit from the package (which 
isn't really all that well defined -- do you mean unloading, exit from 
R, detaching??

It's not very easy to have something be guaranteed to execute "when 
you're done".  The RODBC package does it using an external pointer, 
which has a hook that is called when R shuts down.  If it's good enough 
to execute on unloading but skip execution on shutdown, then .onUnload 
is available.

Duncan Murdoch



More information about the R-devel mailing list