[R] Use of library(X) in the code of library X.

Bart Kastermans kasterma at kasterma.net
Sun Jun 8 10:15:18 CEST 2014

Thanks Max and Duncan for the replies.

To Max in particular I would say that ready code written in possibly non-optimal
style (though I did not read enough of caret to have an opinion on that code
in particular) would be good practice too.

When I was a professor and I got complaints about other professors lecturing
I always answered the same; if you want to be a good mathematician you
better learn to get the best from bad lectures since in conferences most talks
are like that.  I can only hope other people would say something similar when
they had students complain to them about my bad lectures.


On 06 Jun 2014, at 21:14, Max Kuhn <mxkuhn at gmail.com> wrote:

> That is legacy code but there was a good reason back then.
> caret is written to use parallel processing via the foreach package.
> There were some cases where the worker processes did not load the
> required packages (even when I used foreach's ".packages" argument) so
> I would do it explicitly. I don't recall which parallel backend had
> the issue.
> The more important lesson is that if you want to "understand some R
> code written by others" you'll learn more bad habits than good ones if
> you examine my packages…
> Max
> On Fri, Jun 6, 2014 at 2:42 PM, Duncan Murdoch <murdoch.duncan at gmail.com> wrote:
>> On 06/06/2014 10:26 AM, Bart Kastermans wrote:
>>> To improve my R skills I try to understand some R code written by others.
>>> Mostly
>>> I am looking at the code of packages I use.  Today I looked at the code
>>> for the
>>> caret package
>>> http://cran.r-project.org/src/contrib/caret_6.0-30.tar.gz
>>> in particular at the file R/adaptive.R
>>> This file starts with:
>>> adaptiveWorkflow <- function(x, y, wts, info, method, ppOpts, ctrl, lev,
>>>                              metric, maximize, testing = FALSE, ...) {
>>>   library(caret)
>>>   loadNamespace("caret”)
>>> From ?library and googling I can’t figure out what this code would do.
>>> Why would you call library(caret) in the caret package?
>> I don't know that package, and since adaptiveWorkflow is not documented at
>> the user level, I can't tell exactly what the author had in mind.  However,
>> code like that could be present for debugging purposes (and is
>> unintentionally present in the CRAN copy), or could be intentional.  The
>> library(caret) call has the effect of ensuring that the package is on the
>> search list.  (It might have been loaded invisibly by another package.)
>> This is generally considered to be bad form nowadays; packages should
>> function properly without being on the search list.
>> I can't think of a situation where loadNamespace() would do anything --- it
>> would have been called by library().
>> Duncan Murdoch
>> ______________________________________________
>> 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