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

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Wed Mar 6 19:46:55 CET 2024


On 06/03/2024 1:00 p.m., Martin Maechler wrote:
>>>>>> 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.

One thing I don't understand about that suggestion (which is taken from 
WRE, I'm not blaming Rich for it):  why include the backslash in the 
negated character class? Does R ever create variables starting with a 
backslash, or is this just a more or less harmless error, thinking that 
the dot needs escaping?

Duncan Murdoch

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