On 24/02/2012 11:20, Martin Maechler wrote:
Joris Meys<jorism...@gmail.com>
     on Fri, 24 Feb 2012 11:24:35 +0100 writes:

     >  I ran into some very irritating behaviour I don't
     >  understand.  Let me illustrate with the package gdata()
     >  and the function print.object_size() :

     >>  print(object.size(iris),units='Kb')
     >  6.3 Kb
     >>  getAnywhere(print.object_size)
     >  A single object matching ‘print.object_size’ was found It
     >  was found in the following places registered S3 method for
     >  print from namespace utils namespace:utils with value ...

     >  All is well. So now I load gdata

     >>  require(gdata)
     >  Loading required package: gdata ...  The following
     >  object(s) are masked from ‘package:utils’:

     >      object.size

     >  OK, this is what I would expect:

     >>  print(object.size(iris),units='Kb')
     >  [1] 6424
     >>  getAnywhere(print.object_size)
     >  2 differing objects matching ‘print.object_size’ were
     >  found in the following places registered S3 method for
     >  print from namespace utils namespace:gdata namespace:utils
     >  Use [] to view one of them

     >  Now I detach gdata again

     >>  detach(package:gdata)

     >  But the function print.object_size is still the default
     >  for object_size objects!

     >>  print(object.size(iris),units='Kb')
     >  [1] 6424

     >  And it can still be found as well:

     >>  getAnywhere(print.object_size)
     >  2 differing objects matching ‘print.object_size’ were
     >  found in the following places registered S3 method for
     >  print from namespace utils namespace:gdata namespace:utils
     >  Use [] to view one of them

     >  Am I missing something?

Yes:  the argument  'unload'   of detach().

In general: Now that every package has a namespace,
you (and others) should learn the difference between
attaching and loading - and hence  detach()ing and unloading
a package with its namespace.

  ?detach
  ?library

etc should give a good start.

A very good point, but actually there is more to this one. 'gdata' registers an S3 method which overwrites the one from utils. Unloading a namespace does not unregister its methods (and registration has no stack, so there is no way R knows what was there before).

--
Brian D. Ripley,                  rip...@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to