[R] identify object that causes "Error in loadNamespace(name) : there is no package called ‘R.utils’"
murdoch.duncan at gmail.com
Wed Apr 24 16:57:14 CEST 2013
On 13-04-24 10:12 AM, Martin Morgan wrote:
> On 04/24/2013 06:03 AM, Duncan Murdoch wrote:
>> On 13-04-24 5:46 AM, Liviu Andronic wrote:
>>> Dear all,
>>> I've bumped into the: "Error in loadNamespace(name) : there is no
>>> package called ‘R.utils’" error. I've already read a bit on this (
>>> http://www.cybaea.net/Blogs/Data/A-warning-on-the-R-save-format.html )
>>> but I have a follow-up question.
>>> Given a workspace that automatically loads a package that I don't
>>> really need/want (e.g. ‘R.utils’), how do I identify which object
>>> requires this package to load? I would like to avoid loading ‘R.utils’
>>> every time I open an R session.
>> That's not easy, because the code in R that triggers that error has no idea of
>> the name of the object it is loading.
> Maybe traceback() can provide some hints? I did, more or less arbitrarily
> a = list(fun=ie.setup)
> save(a, file="/tmp/a.rda")
> and then in a new session
> > load("/tmp/a.rda")
> Error in loadNamespace(name) : there is no package called 'rms'
> > traceback()
> 7: stop(e)
> 6: value[[3L]](cond)
> 5: tryCatchOne(expr, names, parentenv, handlers[[1L]])
> 4: tryCatchList(expr, classes, parentenv, handlers)
> 3: tryCatch(loadNamespace(name), error = function(e) stop(e))
> 2: getNamespace(c("rms", "3.6-3"))
> 1: load("/tmp/a.rda")
> with the line numbered 2 giving me the necessary hint.
That tells you that some object needs the rms package, but I don't see
how you would know it is "a" that is the problem. We already knew that
rms was needed from the error message.
What I've done sometimes in debugging is to change that error to a
warning in the getNamespace() function, and add some tracing code to the
serialization code to print the names of objects as they are loaded.
(This goes in ReadItem in src/main/serialize.c.)
I wouldn't expect Liviu to make those changes, but perhaps a "verbose"
option could be added to load(), so that it could be available to users.
>> You could try a binary search to find out, but it will be tedious:
>> 1. Install R.utils.
>> 2. Load the workspace successfully.
>> 3. Delete half the objects, and save it.
>> 4. Uninstall R.utils, and see if you can load the workspace.
>> At this point you'll know if there's an object needing R.utils still left or
>> not, and you can repeat the steps until you find a single object that causes the
>> problem. (But it might not be the only one, so deleting it from the original
>> workspace might not solve your problem.)
>> A better approach is to *never* save and load workspaces unless you know exactly
>> what is in them. Always reply "no" to the question about saving your workspace
>> (or set that as the default). If you accidentally end up with a workspace being
>> loaded, delete it.
>> Duncan Murdoch
>>> R version 2.15.3 (2013-03-01)
>>> Platform: i686-pc-linux-gnu (32-bit)
>>>  LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
>>>  LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8
>>>  LC_PAPER=C LC_NAME=C
>>>  LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8
>>> attached base packages:
>>>  datasets grDevices splines graphics utils stats
>>> methods base
>>> other attached packages:
>>>  R.utils_1.23.2 R.oo_1.13.0 R.methodsS3_1.4.2
>>> tables_0.7.57 reshape2_1.2.2
>>>  car_2.0-15 nnet_7.3-6 MASS_7.3-23
>>> Hmisc_3.10-1 survival_2.37-2
>>>  foreign_0.8-53
>>> loaded via a namespace (and not attached):
>>>  cluster_1.14.3 grid_2.15.3 lattice_0.20-13 plyr_1.8
>>>  stringr_0.6.2 tools_2.15.3
>> R-help at r-project.org mailing list
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help