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
Prof Brian Ripley
2012-Jan-15 07:34 UTC
[Rd] A: ImportFrom(B, ...) -- B: ImportFrom(A, ...)
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