[R] identify object that causes "Error in loadNamespace(name) : there is no package called ‘R.utils’"

Duncan Murdoch murdoch.duncan at gmail.com
Wed Apr 24 23:04:01 CEST 2013


On 13-04-24 10:57 AM, Duncan Murdoch wrote:
> 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
>>
>> library(rms)
>> a = list(fun=ie.setup)
>> save(a, file="/tmp/a.rda")
>> remove.packages("rms")
>>
>> 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.


I have added this in R-devel.  The format of the printed output may well 
change before this is ever released, but it should be enough to identify 
the bad item already.

You'll need a build of R-devel from r62658 or newer to see this.  Then

load("/tmp/a.rda", verbose=TRUE)

will print the names of objects as they are read (the names are read 
after the attributes and before the value).  If you want to see reams of 
mostly useless information, you can try verbose=n (for some number n=2 
or more); this prints names and component numbers to a greater depth.

Duncan Murdoch

>
> Duncan Murdoch
>
>>
>> Martin
>>
>>
>>>
>>> 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
>>>
>>>>
>>>> Regards,
>>>> Liviu
>>>>
>>>>
>>>>> sessionInfo()
>>>> R version 2.15.3 (2013-03-01)
>>>> Platform: i686-pc-linux-gnu (32-bit)
>>>>
>>>> locale:
>>>>     [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
>>>> LC_TIME=en_US.UTF-8
>>>>     [4] LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8
>>>> LC_MESSAGES=en_US.UTF-8
>>>>     [7] LC_PAPER=C                 LC_NAME=C
>>>> LC_ADDRESS=C
>>>> [10] LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8
>>>> LC_IDENTIFICATION=C
>>>>
>>>> attached base packages:
>>>> [1] datasets  grDevices splines   graphics  utils     stats
>>>> methods   base
>>>>
>>>> other attached packages:
>>>>     [1] R.utils_1.23.2    R.oo_1.13.0       R.methodsS3_1.4.2
>>>> tables_0.7.57     reshape2_1.2.2
>>>>     [6] car_2.0-15        nnet_7.3-6        MASS_7.3-23
>>>> Hmisc_3.10-1      survival_2.37-2
>>>> [11] foreign_0.8-53
>>>>
>>>> loaded via a namespace (and not attached):
>>>> [1] cluster_1.14.3   grid_2.15.3      lattice_0.20-13  plyr_1.8
>>>>     rstudio_0.97.312
>>>> [6] stringr_0.6.2    tools_2.15.3
>>>>
>>>>
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> 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 mailing list