On 5/3/07, Vladimir Eremeev <[EMAIL PROTECTED]> wrote:
>
>
> Vadim Ogranovich wrote:
> >
> > Hi,
> >
> > I ran into a problem of converting a text representation of an expression
> > into parsed expression to be further evaluated inside lm ().
> >
> >> n <- 100
> >> data <- data.frame(x= rnorm (n), y= rnorm (n))
> >> data. lm <- lm (y ~ x, data=data)
> >>
> >> ## this works
> >> update(data. lm , subset=x<0)
> >
> > Call:
> > lm (formula = y ~ x, data = data, subset = x < 0)
> >
> > Coefficients:
> > (Intercept) x
> > -0.07864094193322170023 -0.14596982635007796358
> >
> >>
> >> ## this doesn't work
> >> ## text representation of subset
> >> subset <- "x<0"
> >> update(data. lm , subset=parse(text=subset))
> > Error in `[.data.frame`(list(y = c(-0.601925958140825, -0.111931189071517,
> > :
> > invalid subscript type
> >
> > What is the correct way to convert "x<0" into a valid subset argument?
> >
>
> update(data.lm,subset=eval(parse(text=subset)))
Just wanted to point out one difference. Using eval
is not quite the same as using do.call since the
Call: part does not come out as desired if you use eval but if you
use do.call it comes out good enough that you can tell what was
intended to be subset from the output:
> update(data.lm,subset=eval(parse(text=subset)))
Call:
lm(formula = y ~ x, data = data, subset = eval(parse(text = subset)))
Coefficients:
(Intercept) x
-0.1335 -0.1248
> do.call("update", list(data.lm, subset = parse(text = subset)))
Call:
lm(formula = y ~ x, data = data, subset = expression(x < 0))
Coefficients:
(Intercept) x
-0.1335 -0.1248
______________________________________________
[email protected] 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.