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

2023-10-14 Thread Martin Maechler
> Ivan Krylov 
> on Thu, 12 Oct 2023 18:50:30 +0300 writes:

> On Thu, 12 Oct 2023 11:32:24 -0400
> Mikael Jagan  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.


> 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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

2023-10-14 Thread Henrik Bengtsson
On Sat, Oct 14, 2023 at 5:25 AM Martin Maechler
 wrote:
>
> > Ivan Krylov
> > on Thu, 12 Oct 2023 18:50:30 +0300 writes:
>
> > On Thu, 12 Oct 2023 11:32:24 -0400
> > Mikael Jagan  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@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel


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

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

> On Sat, Oct 14, 2023 at 5:25 AM Martin Maechler
>  wrote:
>> 
>> > Ivan Krylov
>> > on Thu, 12 Oct 2023 18:50:30 +0300 writes:
>> 
>> > On Thu, 12 Oct 2023 11:32:24 -0400
>> > Mikael Jagan  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@r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel

__
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel