Hello,
Since this has turned into a worldwide code review, I will briefly
address that, then reiterate the point of the original message.
I am working on an initial release of a package. It reveals
information to a user, sometimes in a print method-y way, sometimes in
more of a verbose / debugging way that is under control of a
documented option, which defaults to "off" or "quiet". For now, I have
chosen to send all of this output through a single functions that,
yes, uses cat(). I went this direction for an initial release to keep
the package simple and accumulate some user experience. If the
"debugging mode" proves to be useful, I will rework it, possibly using
UI functionality that I believe our group might release in the future.
Rest assured, I understand cat() vs message() and the various
tradeoffs. I made mine and it is my impression that package maintainers have this level of freedom.
The real point is: the currenrt CRAN submission process is designed
for one-way communication and there's no guarantee of continuity of reviewer.
If this type of implementation review is going to happen, it seems
that many aspects of the process would need to change, to make sure
these new standards are applied consistently to every submission and
that existing package are brought up to current standards.
To clarify something for Joris, I am not aware of any special channel
of communication or influence between CRAN and the R Foundation (of
which I am also a member). I think this is an aspect of CRAN vs R
Foundation (vs R Core even) that is unclear to many. These entities
operate quite independently, except for the fact that specific people
belong to more than one. So RF members interact with CRAN the same way
as any other of member of the community.
-- Jenny
On Wed, May 15, 2019 at 6:43 AM Jim Hester <james.f.hester at gmail.com>
wrote:
Sorry first sentence should read
I agree that `message()` is ideally preferred, precisely because of
the reasons Martin stated, it is easily controlled by the user.
On Wed, May 15, 2019 at 9:41 AM Jim Hester
<james.f.hester at gmail.com>
wrote:
I agree that `message()` is in an ideally preferred, precisely
because of the reasons Martin stated, it is easily controlled by the user.
Unfortunately, in the real world, the windows R gui console and
RStudio (which copied behavior) color messages, and anything on
stderr in fact, in red, which confuses most users who are trained
to treat messages in red as errors.
This also makes using colored output (where available) more
challenging when using `message()`. You either have to accept the
text as red, or unconditionally change the text color to black or
similar, which can then be unreadable if the user is using a dark
color theme.
Jenny is an experienced package developer. She knew this tradeoff
and the use of `cat()` in gargle was deliberate choice in an
imperfect world. She did not make this decision out of ignorance
of a better way.
However there is no way for Jenny or any other package developers
to have a dialog during a CRAN submission, the communication is
only in one direction, if she resubmits explaining her rationale
for the choice she may not even have the same reviewer the next time.
Bioconductor seems to have a much better review process for
submissions, with real dialog between the reviewer and package
author, perhaps CRAN can learn from that process and improve the
submission experience in the future.
Jim
On Wed, May 15, 2019 at 7:41 AM Martin Morgan
<mtmorgan.bioc at gmail.com
message() / warning() / stop() write to stderr whereas print() /
write (by default) to stdout. Even without being able to suppress
it is well-established practice (the story is that this is the
reason why 'stderr' was introduced into unix,
https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.
jstorimer.com%2Fblogs%2Fworkingwithcode%2F7766119-when-to-use-stderr-i
nstead-of-stdout&data=01%7C01%7Chongooi%40microsoft.com%7C6ab84a03
dd6048a5160d08d6d94d0b70%7C72f988bf86f141af91ab2d7cd011db47%7C1&sd
ata=8%2F6BhGQWQqy7OOrjw4gaDRuYfPgYIdEoLEpTl6Q4hgQ%3D&reserved=0
) to separate diagnostic messages from program output. I agree that
(in particular, and packages in general, given the theme of this
mailing
list) would be a better package if it used message() where it now
uses cat().
Martin
?On 5/15/19, 5:04 AM, "R-package-devel on behalf of Joris Meys"
<
r-package-devel-bounces at r-project.org on behalf of
Joris.Meys at ugent.be>
wrote:
2) Where cat() is used in gargle, message() is a better
option
> myfun <- function(){cat("Yes");message("No")}
> suppressMessages(myfun())