[R] transfer string to expression

David Winsemius dwinsemius at comcast.net
Sun Oct 31 21:33:34 CET 2010

```On Oct 31, 2010, at 3:22 PM, Yilong Zhang wrote:

> Dear all:
>
> when I use parse() there is some problems. Below is an example:
>
> b0<-1
> b1<-1
> x<-1
> str2expr<-function(x){eval(parse(text=x))}
> test1<-"b0+b1*sqrt(x)"
> test2<-"b0+b1"
> str2expr(test1)
> str2expr(test2)

I don't think the scoping rules are up to the task of keeping the x's
distinct:

> b0<-1
> b1<-1
> xx<-1
> str2expr<-function(x){eval(parse(text=x))}
> test1<-"b0+b1*sqrt(xx)"
> test2<-"b0+b1"
> str2expr(test1)
[1] 2
> str2expr(test2)
[1] 2

>
> it can work well for test2 but not for test1.
>
> Could you tell me how to fix this problem or is there other more
> stable
> method to transfer an string to expression?

I generally try to keep the variables distinct so my brain can handle
the various levels. So I would probably not have used x in that
manner. I think it made the interpreter attempt to take the sqrt of
"b0+b1*sqrt(x)", which gave you the "Error in sqrt(x) : Non-numeric
argument to mathematical function"

And apropos is this:
> fortune("If the answer is parse()")

If the answer is parse() you should usually rethink the question.
-- Thomas Lumley
R-help (February 2005)

--
David Winsemius, MD
West Hartford, CT

```