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

Henrik Bengtsson henr|k@bengt@@on @end|ng |rom gm@||@com
Sat Oct 14 19:37:14 CEST 2023


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
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