[R] Calling the curve function with a character object converted into an expression

Bert Gunter bgunter@4567 @ending from gm@il@com
Thu May 3 07:35:47 CEST 2018


Sebastian:

This is somewhat arcane, perhaps even a bug (correction on this
welcomed). The problem is that the "expr" argument to curve() must be
an actual expression, not a call to parse that evaluates to an
expression. If you look at the code of curve() you'll see why
(substitute() does not evaluate  expr in the code). Another simple
workaround other than sticking in the eval() call is this:

myf <- function(x)NUL
body(myf)<- parse(text = "{1+x^2}")   ## note the additional "{   }"
for safety, though not necessary here
## this idiom will continue to work for any text.

curve(myf, from = 0, to = 10)  ## myf is now the name of a function
that executes the parsed text.

*** I would appreciate any wiser R programmers correcting any
misunderstanding or error in my explanation ***

Cheers,
Bert

Bert Gunter

"The trouble with having an open mind is that people keep coming along
and sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Wed, May 2, 2018 at 8:11 PM, Sebastien Bihorel
<sebastien.bihorel at cognigencorp.com> wrote:
>
> Hi,
>
> Down a cascade of function calls, I want to use the curve function with an expression that is a variable. For various reason, this variable must be a character object and cannot be an expression as required by the curve function. How do I convert my variable into a expression that is accepted by curve?
>
> Thanks in advance for your help.
>
> ## The following attempts do not work
>
> myf <- '1+x^2'
> curve(myf, from = 0, to = 10) # obviously !
> curve(parse(text=myf), from = 0, to = 10) # not sure why this does not work
>
> ## This works but does not feel elegant:
> eval(parse(text=sprintf('curve(%s, from = 0, to = 10)', myf)))
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list