# Re: [R] question about formula for lm

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sat, 16 Jun 2007 12:54:27 -0400

A couple of easy ways are to create the calling sequence as a call or character string and then evaluate it:

eval(bquote(lm(.(as.name(Ytext)) ~ Xvar, X)))

eval(parse(text = paste("lm(", Ytext, "~ Xvar, X)")))

Note that these solutions both have the advantage over some of the prior solutions that the output from print.lm shows which variable was actually used after Call:

> eval(bquote(lm(.(as.name(Ytext)) ~ Xvar, X)))
Call:
lm(formula = Yvar ~ Xvar, data = X) <--- This line comes out meaningfully!!!

Coefficients:

```(Intercept)         Xvar
0.3300       0.9729

```

On 6/14/07, Pedro Mardones <mardones.p_at_gmail.com> wrote:
> Dear all;
>
> Is there any way to make this to work?:
>
> .x<-rnorm(50,10,3)
> .y<-.x+rnorm(50,0,1)
>
> X<-data.frame(.x,.y)
> colnames(X)<-c("Xvar","Yvar")
>
> Ytext<-"Yvar"
>
> lm(Ytext~Xvar,data=X) # doesn't run
>
> lm(Yvar~Xvar,data=X) # does run
>
> The main idea is to use Ytext as input in a function, so you just type
> "Yvar" and the model should fit....
> Also, I need to avoid the expression X\$Yvar~X\$Xvar
>
> Thanks for any idea
>
> PM
>
> ______________________________________________
> R-help_at_stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help