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.ulr...@gmail.com> wrote:
>>
>> On Wed, Mar 6, 2024 at 1:03 AM Richard M. Heiberger <r...@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 <ikry...@disroot.org> wrote:
>>>>
>>>> В Tue, 5 Mar 2024 22:41:32 +0000
>>>> "Richard M. Heiberger" <r...@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@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@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
______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel