[Rd] importing namespaces from base packages

Martin Maechler maechler at stat.math.ethz.ch
Tue Mar 13 12:47:28 CET 2018


>>>>> Adrian Dușa <dusa.adrian at unibuc.ro>
>>>>>     on Tue, 13 Mar 2018 09:17:08 +0200 writes:

    > On Mon, Mar 12, 2018 at 2:18 PM, Martin Maechler <maechler at stat.math.ethz.ch>
    > wrote:
    >> [...]
    >> Is that so?   Not according to my reading of the 'Writing R
    >> Extensions' manual, nor according to what I have been doing in
    >> all of my packages for ca. 2 years:
    >> 
    >> The rule I have in my mind is
    >> 
    >> 1) NAMESPACE Import(s|From) \
    >> ............................ <==>  DESCRIPTION -> 'Imports:'
    >> 2) .. using "::" in  R code /
    >> 
    >> 
    >> If you really found that you did not have to import from say
    >> 'utils', I think this was a *un*lucky coincidence.

    > Of course, the importFrom() is mandatory in NAMESPACE otherwise the package
    > does not pass the checks.
    > The question was related to the relation between the packages mentioned in
    > the NAMESPACE and the packages mentioned in the Imports: field from
    > DESCRIPTION.

    > For instance, the current version 3.1 of package QCA on CRAN mentions in
    > the DESCRIPTION:

    > Imports: venn (≥ 1.2), shiny, methods, fastdigest

    > while the NAMESPACE file has:

    > import(shiny)
    > import(venn)
    > import(fastdigest)
    > importFrom("utils", "packageDescription", "remove.packages",
    > "capture.output")
    > importFrom("stats", "glm", "predict", "quasibinomial", "binom.test",
    > "cutree", "dist", "hclust", "na.omit", "dbinom", "setNames")
    > importFrom("grDevices", "dev.cur", "dev.new", "dev.list")
    > importFrom("graphics", "abline", "axis", "box", "mtext", "par", "title",
    > "text")
    > importFrom("methods", "is")

    > There are functions from packages utils, stats, grDevices and graphics for
    > which the R checks do not require a specific entry in the Imports: field.
    > I suspect because all of these packages are part of the base R, but so is
    > package methods. The question is why is it not mandatory for those packages
    > to be mentioned in the Imports: field from DESCRIPTION, while removing
    > package methods from that field runs into an error, despite maintaining the
    > package in the NAMESPACE's importFrom().


Thank you, Adrian,  for clarification of your question.
As a matter of fact, I was not aware of what you showed above,
and personally I think I do add every package/namespace mentioned in
NAMESPACE to the DESCRIPTION's  "Imports:" field.

AFAIK the above phenomenon is not documented, and rather the
docs would imply that this phenomenon might go away -- I for one
would vote for more consistency here ..

Martin

    >> [...]
    >> There are places in the R source where it is treated specially,
    >> indeed, part of 'methods' may be needed when it is neither
    >> loaded nor attached (e.g., when R runs with only base, say, and
    >> suddenly encounters an S4 object), and there still are
    >> situations where 'methods' needs to be in the search() path and
    >> not just loaded, but these cases should be unrelated to the
    >> above DESCRIPTION-Imports vs NAMESPACE-Imports correspondence.

    > This is what I had expected myself, then the above behavior has to have
    > another explanation.
    > It is just a curiosity, there is naturally nothing wrong with maintaining
    > package methods in the Imports: field. Only odd why some base R packages
    > are treated differently than other base R packages, at the package checks
    > stage.

    > Thank you,
    > Adrian

    > --
    > Adrian Dusa
    > University of Bucharest
    > Romanian Social Data Archive
    > Soseaua Panduri nr. 90-92
    > 050663 Bucharest sector 5
    > Romania
    > https://adriandusa.eu

    > [[alternative HTML version deleted]]



More information about the R-devel mailing list