[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



More information about the R-help mailing list