> On 5/8/05, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > [Alexander Stoddard] > > > Subject: Re: [Rd] How to understand packages, namespaces, > > > environments > > > > > > > > > > > Does saying the following load package 'foo' into its own > > > environment ? > > > > > library(foo) > > > > > [Duncan Murdoch] > > > This loads some of the (name, object) pairs from the package into > > > two > > > environments: the public one the user can see, and the namespace > > > one that the code in the package can see. They're related, you > > > don't get two copies of the objects. > > [MVB] > > That's interesting-- I thought there really were two copies. In my > > debug package, I've taken the approach of changing both copies. > [Gabor Grothendieck] > How does one refer to the two different copies? Thanks. > >
The help for fun.locator (in the debug package) contains my interpretation of what's going on (which might be wrong, but seems to work). A slightly simplified version of the guts of fun.locator is as follows: # function to check for something called fname is.here <- function( env) exists( fname, env=env, inherits=FALSE) # Search path search.envs <- lapply( 1:length( search()), pos.to.env) ff <- search.envs[ sapply( search.envs, is.here)] # Hidden namespace environments ln <- lapply( loadedNamespaces(), asNamespace) ff <- c( ff, ln[ sapply( ln, is.here)]) # S3 methods: S3 <- lapply( ln, function( x) if( exists( '.__S3MethodsTable__.', x, inherits=FALSE)) get( '.__S3MethodsTable__.', x) else 0) S3 <- S3[ !sapply( S3, is.numeric)] ff <- c( ff, S3[ sapply( S3, is.here)]) Then ff is a list of environments where a copy (?) of fname exists-- and you can use ff[[i]][[fname]] or get(fname, env=ff[[i]]) & assign( fname, ..., env=ff[[i]]) I should point out that the doco for asNamespace says "not intended to be called directly"-- but I couldn't see an alternative, and anyway it seems to work (for now). Mark ______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel