From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Mon Jun 17 10:21:24 2019
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Mon, 17 Jun 2019 10:21:24 +0200
Subject: [Rd] 
 Bug report: 'formula("x")' loops infinitely ('formula("y")'
 does not)
In-Reply-To: <1166390877.2555935.1560542174704@mail.yahoo.com>
References: <1166390877.2555935.1560542174704.ref@mail.yahoo.com>
 <1166390877.2555935.1560542174704@mail.yahoo.com>
Message-ID: <23815.19844.883659.184113@stat.math.ethz.ch>

>>>>> P Poncet via R-devel 
>>>>>     on Fri, 14 Jun 2019 19:56:14 +0000 writes:

    > Dear,??

    > The script'formula("x")' loops infinitely. 

well ... if it would really, your computer would still be
running and heating ... ;-)

    > More specifically, it throws the following error:?

    > Error: evaluation nested too deeply: infinite recursion /
    > options(expressions=)??

Yes, or something similar depending on your computer operating
system (OS) and/or memory settings.

    > As a side effect,this makes an IDE like RStudio to crash.

[really ?]

    > On the other hand,the script 'formula("y")'?works as
    > expected :  if ?y? does not exist in the global environment,
    > it throws:

    > Error in eval(parse(text = x, keep.source = FALSE)[[1L]]) :
    > object ?y? not found

well, that's not "as expected" I hope; also it should not depend
on "y" existing or not.

    > I use R-3.6.0 on Windows.?

Interestingly, when I had introduced str2lang() and
str2expression() into R-devel [now in R 3.6.0]  I also made long
passes into all the base R code to find locations where these
new functions could & should be used... and also found the
formula.character method (in R base package 'stats')  which is
indeed what formula("..")  calls.

When trying to introduce str2call() etc there, I indeed found
that formula.character() had many quirks and undesired
properties *in the case* a user does not specify a formula
correctly.  I've corrected all (well, modestly say "most") of
these, such in R-devel, for several months now,

> formula("x")
Error in formula.character("x") : invalid formula "x": not a call
> formula("y")
Error in formula.character("y") : invalid formula "y": not a call
> 

{ which is something I would expect rather then the above
  'object "y" not found'  ...}

    > Best regards,? Paul Poncet

Thank you, Paul!

To other readers:  I am tempted to port the new formula()
behavior from R-devel to R patched,  to make it into R 3.6.1
It does fix this and similar bugs/inconsistencies but it *is* a minor
API change and may break user code that had relied on previous
incorrect behavior.

In R-devel, e.g.,

> formula(c("y~ ", " x"))
y ~ x
Warning message:
Using formula(x) is deprecated when x is a character vector of length > 1.
  Consider formula(paste(x, collapse = " ")) instead. 

> formula("{y ~ x}")
y ~ x
Warning message:
invalid formula "{y ~ x}": extraneous call to `{` is deprecated 
>

and if we port formula.character() from R-devel to  'R patched'
(to become 3.6.1), we'd port it completely.

Opinions?

Martin Maechler
ETH Zurich  and  R Core team



[Rd] Bug report: 'formula("x")' loops infinitely ('formula("y")' does not)
Martin Maechler