[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