[Rd] Namespace dependency not required

Patrick Giraudoux patrick.giraudoux at univ-fcomte.fr
Sun Mar 18 19:27:54 CET 2012


Le 18/03/2012 18:02, Uwe Ligges a écrit :
>
>
> On 18.03.2012 16:08, Patrick Giraudoux wrote:
>> Le 18/03/2012 14:57, Uwe Ligges a écrit :
>>>
>>>
>>> On 18.03.2012 11:21, Patrick Giraudoux wrote:
>>>> Hi,
>>>>
>>>> I am working at adding namespace to my packages, carefully 
>>>> following the
>>>> doc "Writing R extensions" and some threads on the web. However I 
>>>> cannot
>>>> find clear explanation about how to best deal with the import or
>>>> importFrom functions in the name space. To make it short:
>>>>
>>>> To declare dependencies in the description file either after Depends:
>>>> (packages including functions that are called from a package function)
>>>> or after Suggests: (packages that are called eg from the doucmentation
>>>> examples), works well. In this case one does not need to declare 
>>>> import
>>>> in the namespace file.
>>>>
>>>> However, declaring dependencies sometimes for using only one 
>>>> function in
>>>> a given package looks a bit over the top, and I though I could use
>>>> importFrom in the namespace to deal with that. So removing the
>>>> corresponding declaration in Depends (description file) and declaring
>>>> eg importFrom(splancs, inout) in the namespace always led to:
>>>>
>>>> * checking package dependencies ... ERROR
>>>> Namespace dependency not required: 'splancs'
>>>>
>>>> Same thing with import(sp). I have the same trouble if I do not remove
>>>> the declarations in Depends.
>>>>
>>>> So, I can hardly follow the meaning of the "Writing R extension" doc:
>>>>
>>>> Packages implicitly import the base namespace. Variables exported from
>>>> other packages with namespaces need to be imported explicitly using 
>>>> the
>>>> directives |import| and |importFrom|. The |import| directive 
>>>> imports all
>>>> exported variables from the specified package(s). Thus the directives
>>>>
>>>> import(foo, bar)
>>>>
>>>> specifies that all exported variables in the packages *foo* and *bar*
>>>> are to be imported. If only some of the exported variables from a
>>>> package are needed, then they can be imported using |importFrom|. The
>>>> directive
>>>>
>>>> importFrom(foo, f, g)
>>>>
>>>> specifies that the exported variables |f| and |g| of the package *foo*
>>>> are to be imported.
>>>>
>>>> Can anybody tell us the conditions for which import and importFrom
>>>> commands should be used in the NAMESPACE rather than in the Depends 
>>>> and
>>>> Suggests declarations of the description file, and the conditions of
>>>> their applicability (without error message... eg with a working
>>>> example) ?
>>>
>>> If you import from another namespace (which is the recommended way
>>> rather than just relying on search order), do not forget to declare it
>>> as "Imports" in your DESCRIPTION file. Your package depends on the
>>> other one: It could not be loaded without having the other one
>>> installed now.
>>>
>>> Uwe Ligges
>>>
>>
>> OK. got it (more or less).
>>
>> With this in the description file:
>>
>> Depends: boot (>= 1.3-4), nlme(>= 3.1-64), rgdal (>= 0.7-8), sp (>=
>> 0.9-97), spdep (>= 0.5-43), splancs (>= 2.01-31)
>>
>> importFrom(splancs, inout) is accepted in the NAMESPACE file and I have
>> no error message with rcmd check.
>>
>> Irr works also with:
>>
>> Depends: boot (>= 1.3-4), nlme(>= 3.1-64), rgdal (>= 0.7-8), sp (>=
>> 0.9-97), spdep (>= 0.5-43)
>> Imports: splancs (>= 2.01-31)
>>
>> Practically, I a am safe (thanks a lot), but I am however still hungry
>> to learn a bit more. I hardly understand what R does when reading the
>> suggests and imports in the DESCRIPTION file compared to what it does
>> reading the NAMESPACE (my mistake was to believe that one was a
>> substitute for the other). From a practical point of view, why is it
>> important to use import or importFrom in the NAMESPACE when everything
>> looks like working well when declarations are done in the DESCRIPTION
>> file only (eg in depends or imports)? It is not crystal clear to me even
>> reading carefully "Writing R extension". DESCRIPTION file is used to get
>> the "list of packages that will be attached (...) before the current
>> package" (indeed, now, I no longer needs to use 'require' within my
>> package functions). In simple words, what may add the NAMESPACE to 
>> that ?
>>
>> Apologize to be so poorly aware (= so much stupid) about the role of
>> each of those declaration spaces.
>
> Please read some literature about NAMESPACES, e.g. documentation in 
> Writing R Extensions plus Luke Tierney's articles in R News.

ok. Will do it with Luke Tierney's articles. I read Writing R extensions 
already and also S programming (Venables and Ripley), but indeed should 
come down to more basic text for dudes :-) .

Best,

Patrick


>
> A NAMESPACE import imports functionality of another namespace into 
> your own namespace and hence avoids problems caused by name clashes.
> The DESCRIPTION file is required to derive dependency structure of 
> packages, i.e. derive which package has to be *installed* first etc.
>
> Uwe Ligges
>



More information about the R-devel mailing list