Indeed, when trying : > detach('package:gdata',unload=TRUE) > print(object.size(iris),units='Kb') [1] 6424
However, when I do : > unloadNamespace('gdata') > gc() used (Mb) gc trigger (Mb) max used (Mb) Ncells 380471 10.2 667722 17.9 597831 16.0 Vcells 353363 2.7 905753 7.0 902804 6.9 The function used is still print.object_size from gdata > print(object.size(iris),units='Kb') [1] 6424 But it can't be found any more... > 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 ... (here is indeed the code of the original print.object_size) This is not some kind of behaviour one would expect. I have no clue how to solve this, but I believe it's safe to say that there's room for improvement somewhere to avoid calling a function that's apparently not in the search space. Any other ideas? Cheers Joris On Fri, Feb 24, 2012 at 1:08 PM, Prof Brian Ripley <rip...@stats.ox.ac.uk> wrote: > 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 -- Joris Meys Statistical consultant Ghent University Faculty of Bioscience Engineering Department of Mathematical Modelling, Statistics and Bio-Informatics tel : +32 9 264 59 87 joris.m...@ugent.be ------------------------------- Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel