Joris Meys
2012-Feb-24 10:24 UTC
[Rd] function remains loaded in the search space after detaching the package
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? Cheers Joris -- 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.Meys at Ugent.be ------------------------------- Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
Martin Maechler
2012-Feb-24 11:20 UTC
[Rd] function remains loaded in the search space after detaching the package
>>>>> Joris Meys <jorismeys at 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. Martin Maechler, ETH Zurich