[R-pkg-devel] [External] [External] RcmdrPlugin.HH_1.1-48.tar.gz

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Wed Mar 6 19:00:16 CET 2024


>>>>> Richard M Heiberger 
>>>>>     on Wed, 6 Mar 2024 17:10:50 +0000 writes:

    > Thank you, I will do that reversion in a few days.

(good; I'm sorry I did not see this, before I replied to Joshua's)

    > Before I do, I want to ask if the default export generated by R CMD build should be changed.
    > the default is  exportPattern("."), which seems to be the cause of the problem.
    > Might the default be changed to exportPattern("^[^\\.]") ?

That's a good suggestion in my view.
That default *was* sensible when namespaces were
introduced (~ 2004?): It did indeed ensure that the package worked
entirely as before there were namespaces -- always everything
was "exported", i.e. publicly visible and part of the implicit
package API.

And such 100%-backcompatibility was of course sensible to ease
transition. But we are ca. 20 years later now, and I guess that
most active R users (incl package developers) either don't know
or then hardly remember that R had no namespaces originally.

I see it only in the tools pkg hidden  writeDefaultNamespace()
which is used only once in tools:::.build_packages()

	## add NAMESPACE if the author didn't write one
	if(!file.exists(namespace <- file.path(pkgname, "NAMESPACE")) ) {
	    messageLog(Log, "creating default NAMESPACE file")
	    writeDefaultNamespace(namespace)
	}

Note that the "Bible" on R packages has always been
'Writing R Extensions' - in the R sources,  doc/manual/R-exts.texi

It has -- *since* svn rev 23392,  003-02-27 19:02:45 +0100 
          by Luke Tierney and commit message
	  "Added name space support for packages that do not use methods."

the text, e.g., at
  https://cran.r-project.org/doc/manuals/R-exts.html#Specifying-imports-and-exports

>    For packages with many variables to export it may be more convenient
> to specify the names to export with a regular expression using
> ‘exportPattern’.  The directive

>      exportPattern("^[^\\.]")

> exports all variables that do not start with a period.  However, such
> broad patterns are not recommended for production code: it is better to
> list all exports or use narrowly-defined groups.  .....

so I agree we should change the default.
The R code above shows that the user does get a message about
automatic NAMESPACE creation.

If there are cases, where people need to export even .<some>,
they should have to consciously choose so.

Martin




    >> On Mar 6, 2024, at 11:57, Joshua Ulrich <josh.m.ulrich using gmail.com> wrote:
    >> 
    >> On Wed, Mar 6, 2024 at 1:03 AM Richard M. Heiberger <rmh using temple.edu> wrote:
    >>> 
    >>> Thank you Duncan, Jeff, Ivan.
    >>> 
    >>> I did all that Duncan and Jeff suggested, plus a bit more that appeared to be necessary.
    >>> All of what I did is documented in the RcmdrPlugin.HH/NEWS file.
    >>> 
    >>> Ivan's comments were received after I sent 1.1-50 to CRAN and it was accepted.
    >>> 
    >> I recommend you revert all the changes you made that are documented in
    >> the package NEWS, and at minimum follow Ivan's advice to use
    >> exportPattern("^[^\\.]") instead of exportPattern("."). It would be
    >> even better to follow the advice in Writing R Extensions and list each
    >> exported object individually.
    >> 
    >>> I suggest that my notes in the NEWS file, perhaps augmented with Ivan's comments,
    >>> might be added to utils/man/globalVariables.Rd and to the
    >>> "
    >>> section ‘Package
    >>> structure’ in the ‘Writing R Extensions’ manual.
    >>> "
    >>> 
    >> That section of Writing R Extensions specifically says not to do what you did.
    >> 
    >> Beware of patterns which include names starting with a period: some
    >> of these are internal-only variables and should never be exported,
    >> e.g. ‘.__S3MethodsTable__.’ (and loading excludes known cases).
    >> 
    >> Duncan pointed out that '.__global__' is an internal-only variable
    >> created by globalVariables(), which means it should never be exported
    >> by a package. Imagine the number of conflicts there would be if every
    >> package that used globalVariables() exported the '.__global__'
    >> object... there would probably be thousands, yikes!
    >> 
    >> It's possible that future versions of 'R CMD check' will error if
    >> there are any incorrectly exported internal variables (like
    >> '.__global__'), which would cause your package to fail.
    >> 
    >> Best,
    >> Josh
    >> 
    >> 
    >>> 
    >>>> On Mar 6, 2024, at 01:38, Ivan Krylov <ikrylov using disroot.org> wrote:
    >>>> 
    >>>> В Tue, 5 Mar 2024 22:41:32 +0000
    >>>> "Richard M. Heiberger" <rmh using temple.edu> пишет:
    >>>> 
    >>>>> Undocumented code objects:
    >>>>> '.__global__'
    >>>>> All user-level objects in a package should have documentation
    >>>>> entries. See chapter 'Writing R documentation files' in the 'Writing R
    >>>>> Extensions' manual.
    >>>> 
    >>>> This object is not here for the user of the package. If you don't
    >>>> export it, there will be no WARNING about it being undocumented. This
    >>>> variable is exported because of exportPattern(".") in the file
    >>>> NAMESPACE. The lone dot is a regular expression that matches any name
    >>>> of an R object.
    >>>> 
    >>>> If you don't want to manually list your exports in the NAMESPACE file
    >>>> (which can get tedious) or generate it (which takes additional
    >>>> dependencies and build steps), you can use exportPattern('^[^\\.]') to
    >>>> export everything except objects with a name starting with a period:
    >>>> https://cran.r-project.org/doc/manuals/R-exts.html#Specifying-imports-and-exports
    >>>> 
    >>>> --
    >>>> Best regards,
    >>>> Ivan
    >>> 
    >>> ______________________________________________
    >>> R-package-devel using r-project.org mailing list
    >>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
    >> 
    >> 
    >> 
    >> --
    >> Joshua Ulrich  |  about.me/joshuaulrich
    >> FOSS Trading  |  http://www.fosstrading.com/


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