[R-pkg-devel] Question regarding listing base and recommended packages programmatically and efficiently

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Sat Oct 14 20:29:17 CEST 2023


>>>>> Henrik Bengtsson 
>>>>>     on Sat, 14 Oct 2023 10:37:14 -0700 writes:

    > On Sat, Oct 14, 2023 at 5:25 AM Martin Maechler
    > <maechler using stat.math.ethz.ch> wrote:
    >> 
    >> >>>>> Ivan Krylov
    >> >>>>>     on Thu, 12 Oct 2023 18:50:30 +0300 writes:
    >> 
    >> > On Thu, 12 Oct 2023 11:32:24 -0400
    >> > Mikael Jagan <jaganmn2 using gmail.com> wrote:
    >> 
    >> >> > mk <- file.path(R.home("share"), "make", "vars.mk")
    >> >> > pp <- sub("^.*= +", "", grep("^R_PKGS_RECOMMENDED",
    >> >> > readLines(mk), value = TRUE))
    >> >> > sort(strsplit(pp, " ")[[1L]])
    >> >> [1] "KernSmooth" "MASS"       "Matrix"     "boot"       "class"
    >> >> [6] "cluster"    "codetools"  "foreign"    "lattice"    "mgcv"
    >> >> [11] "nlme"       "nnet"       "rpart"      "spatial" "survival"
    >> >>
    >> >> I grepped around and did not find variables in any base namespace
    >> >> containing the names of these packages.  It wouldn't be too hard to
    >> >> define such variables when R is configured/built, but maybe there are
    >> >> "reasons" to not do that ... ?
    >> 
    >> > tools:::.get_standard_package_names does that at package installation
    >> > time, but it's still not public API.
    >> 
    >> Within R-core, we have somewhat discussed this, and a few
    >> minutes ago I committed a "public API" version of the above,
    >> called
    >> standard_package_names()
    >> 
    >> to R-devel (svn rev 85329), and hence probably in next year's
    >> April release of R.

    > Excellent. Will it be supported on all OSes?  Because, there's
    > currently a source code comment saying the current implementation
    > might not work on MS Windows:

    > ## we cannot assume that file.path(R.home("share"), "make", "vars.mk")
    > ## is installed, as it is not on Windows

Well, it does work nowadays on Windows {just checked}.
So the comment should probably be removed.

{{ I'm definitely not the expert, but AFAIK, the Windows
   installation of R has become considerably closer to the other platform
   ones, recently }}


    > standard_package_names <-
    > .get_standard_package_names <-
    > local({
    > lines <- readLines(file.path(R.home("share"), "make", "vars.mk"))
    > lines <- grep("^R_PKGS_[[:upper:]]+ *=", lines, value = TRUE)
    > out <- strsplit(sub("^R_PKGS_[[:upper:]]+ *= *", "", lines), " +")
    > names(out) <-
    > tolower(sub("^R_PKGS_([[:upper:]]+) *=.*", "\\1", lines))
    > eval(substitute(function() {out}, list(out=out)), envir = topenv())
    > })

    > /Henrik

    >> 
    >> 
    >> > A call to installed.packages() may take a long while because it has to
    >> > list files in every library (some of which can be large and/or
    >> > network-mounted) and parse each Meta/package.rds file, but at least
    >> > list.files() is faster than that.
    >> 
    >> The above is another issue that we've wanted to improve, as some
    >> of you are aware,  notably thinking about caching the result
    >> .. there has been work on this during the R Sprint @ Warwick a
    >> couple of weeks ago,
    >> 
    >> ==> https://github.com/r-devel/r-project-sprint-2023/issues/78
    >> 
    >> involving smart people and promising proposals (my personal view).
    >> 
    >> > If I had to make a choice at this point, I would hard-code the list of
    >> > packages, but a better option may surface once we know what Tony needs
    >> > the package lists for.
    >> 
    >> > --
    >> > Best regards,
    >> > Ivan
    >> 
    >> 
    >> With thanks to the discussants here on R-devel,
    >> and best regards,
    >> Martin
    >> 
    >> --
    >> Martin Maechler
    >> ETH Zurich  and  R Core team
    >> 
    >> ______________________________________________
    >> R-package-devel using r-project.org mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-package-devel




More information about the R-package-devel mailing list