Hello,

Double thanks, for the correction and for the lesson.
In particular, I had never noticed the f2() example's behavior.
It's always good to learn something new.

Rui Barradas


Às 08:57 de 29/07/21, Martin Maechler escreveu:
Rui Barradas
     on Thu, 29 Jul 2021 07:52:02 +0100 writes:

     > Hello,

     > R 4.1.0 on Ubuntu 20.04, session info below.

     > I am not an English native speaker but in help("browser"),
     > section Arguments, argument expr, there is a wrong verb
     > tense:

     > "invoked" should be "invoke", right?

     > expr An expression, which if it evaluates to TRUE the
     > debugger will invoked, otherwise control is returned
     > directly.

     > sessionInfo()   R version 4.1.0  .....

Thank you, Rui.   Indeed, there's a typo there.
I claim that it is a missing 'be':  "be invoked" almost surealy
was intended.

As we are on the R-devel mailing list, however, let's dig and learn a bit more:

Note that the *default*  is  `expr = TRUE`
which is already a bit "special" for an "expression"..

Let's try to understand what was meant --- NB a strategy I
strongly recommend even if you're somewhat experienced :

ff <- function(x) { y <- x^2; browser("in ff():", expr = (y == 4)); y }
ff(1)
[1] 1
ff(2)
Called from: ff(2)
Browse[1]> debug at #1: y
Browse[2]> ls.str()
x :  num 2
y :  num 4
Browse[2]> c
[1] 4
ff(3)
[1] 9


So indeed, it does behave as I expected.
A further experiment, play with

    f2 <- function(x, e=1) { y <- x^2; browser("in ff():", expr = e); y }

shows that  'evaluates to TRUE'  is also
not as precise as it could be, and even "wrong":
  'expr = pi'  also behaves as TRUE,  and even
  'expr = NA'  behaves the same.


I don't know when/how  `expr` was introduced (probably taken
from 'S / S+' ..), but to me it seems actually somewhat a
misnomer because in that generalized sense, *every*
argument passed to an R function is an "expression".
Instead, what counts is that a low-level as.logical(expr) is not TRUE.

So, yes, the documentation about `expr` definitely needs to be
changed.

Unless I get convincing suggestions for improvements, I'll commit

   \item{expr}{a \dQuote{condition}.  By default, and whenever not false
     after being coerced to \code{\link{logical}}, the debugger will be
     invoked, otherwise control is returned directly.}

(and also amend the formulation a bit later on the help page
  where expr is mentioned again).

Martin


     > Thanks to all R Core Team members for their great work for
     > all of us.

     > Hope this helps,

     > Rui Barradas


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

Reply via email to