From ripley at stats.ox.ac.uk  Tue Jan  8 08:31:50 2008
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Tue, 8 Jan 2008 07:31:50 +0000 (GMT)
Subject: [Rd] checking whether the name space can be loaded with stated
 dependencies
In-Reply-To: <Pine.LNX.4.64.0801042155140.30877@gannet.stats.ox.ac.uk>
References: <f8e6ff050801031831j36005a1cw8449a6f65481845b@mail.gmail.com> 
	<Pine.LNX.4.64.0801040237590.26624@gannet.stats.ox.ac.uk>
	<f8e6ff050801040615t3469f32cldfe27bedc5539b1@mail.gmail.com>
	<Pine.LNX.4.64.0801042155140.30877@gannet.stats.ox.ac.uk>
Message-ID: <Pine.LNX.4.64.0801080723090.30441@gannet.stats.ox.ac.uk>

Hadley sent me the package, and my guess *was* correct.  The package is 
not using lazy-loading, and early on it has (in aaa-top-level.r)

TopLevel <- proto(expr = {
...

That is 'a top-level computation'.  To make this work, you need
require("proto") in that file.  It also needs require("grid").

The Depends: packages are available when the package is installed, but not 
when the namespace is loaded.


On Fri, 4 Jan 2008, Prof Brian Ripley wrote:

> On Fri, 4 Jan 2008, hadley wickham wrote:
>
>> On 1/4/08, Prof Brian Ripley <ripley at stats.ox.ac.uk> wrote:
>>> What it is trying is
>>>
>>> % env R_DEFAULT_PACKAGES=NULL R
>>>
>>>> loadNamespace("ggplot2")
>>>
>>> The test is not new, so it would seem to be a change in ggplot2 since the
>>> version on CRAN.  My guess is the your package is doing top-level
>>> computations, which `Writing R Extensions' warns against:
>>>
>>>    The R code files should only create R objects and not call functions
>>>    with side effects such as require and options.
>>
>> Thanks for the additional info. I've grepped for ^[^#\n ]+\(  (which I
>> think should find any top-level function call) and didn't find
>> anything. I certainly can't think of any top level computations that
>> I'm doing apart from creating R functions and objects.  Is there
>> anyway to get more details about what exactly I've done wrong?
>
> As I said, that was a guess: if it is not the cause then I am in the dark.
> If you can send me the version doing this I can try to dig further.
>
>> Calling traceback after loadNamespace isn't helpful.
>>
>>> If you must deviate from that, you need to arrange for the environment you
>>> need: when loading a name space the Depends: packages are not loaded.
>>
>> Is this a recent change to R?
>
> No: that wording is ancient, and the test is not recent.
>
>> The package appears to work fine after
>> installation so I presume this check is protecting me from some more
>> subtle danger.
>
> The danger is that if some other package (or a user) does
> ggplot2::some_function_in_ggplot2 that this will fail if the package is
> not attached, similarly if a package name space imports from ggplot2.
>
>> If it's helpful, my depends line is:
>> Depends: R (>= 2.6), grid, reshape (>= 0.8.0), proto, splines, MASS,
>>  RColorBrewer, colorspace
>>
>> so only proto or RColorBrewer should be a problem.
>>
>> Hadley
>>
>>
>
>

-- 
Brian D. Ripley,                  ripley at 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



[Rd] checking whether the name space can be loaded with stated dependencies
Prof Brian Ripley