[Rd] A: ImportFrom(B, ...) -- B: ImportFrom(A, ...)

Prof Brian Ripley ripley at stats.ox.ac.uk
Sun Jan 15 08:34:36 CET 2012

It is necessary (in most cases, and as implemented).

When R goes to load the namespace of A, it has to find the objects you 
wish to import from B.  Remember that objects in R are not standalone: 
they may have shared components and functions have environments, so the 
only way to so this is to load the whole of their environment, the 
namespace of B.  That would lead to a cycle.

importFrom() differs from import() only in what it copies into A's 
'import' environment.

Remember too that namespaces can re-export imports (e.g. S4 generics), 
and that loading a namespace may load compiled code which may have 
dependencies (your examples do) for which order may matter.

On 14/01/2012 21:54, Martin Maechler wrote:
> If I have a package A  whose NAMESPACE has
>   ImportFrom(B,<B-syms>))
> and a package B  whose NAMESPACE has
>   ImportFrom(A,<A-syms>)
> and we can assume that<A-syms>  and<B-syms>  are disjoint.
> The clue would be that I only import relatively little from
> one namespace to the other.
> I currently get an error
>    Error in loadNamespace(imp[[1L]], c(lib.loc, .libPaths())) :
>      cyclic namespace dependency detected when loading ‘A’,
>      already loading ‘B’, ‘A’
> but isn't this an unnecessary (and too limiting) restriction?
> The use case would be packages Rmpfr and gmp, both for high
> precision arithmetic, and it would be considerably more natural
> if each could import some facilities from the other, instead of
> having an asymmetry  A -->  B  (or B -->  A).
> Martin
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

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

More information about the R-devel mailing list