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

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to