Thanks to James Holtman, Matt Wiener, Douglas Bates, Spencer Graves, John Fox, Roger Peng, Bill Venable, Darryl Greig, Vadim Ogranovich and Peter Dalgaard
There are several ways to tackel this problem, and one easy one which I missed :-) ---------------------------------------------------------------------- Question data.frame is a data frame with column names "x1",...,"xn" y is a response variable of length dim(data.frame)[1] I want to write a function function(y, data.frame){ lm(y~x1+...+xn) } This would be easy if n was always the same. If n is arbitrary how could I feed the x1+...+xn terms into lm(response~terms)? ---------------------------------------------------------------------- y <- c(67,76,56,48,10,43,12,33,88,63,75,14,58,19,14) x1 <- as.factor(c(2,2,2,2,2,1,1,1,1,1,1,1,1,1,1)) x2 <- c(25,40,35,34,51,24,37,31,26,21,41,45,24,26,29) data<-data.frame(x1,x2) ---------------------------------------------------------------------- 1) James Holtman fun <- function(y, data.frame){ .vars <- paste(names(data.frame), collapse="+") eval(parse(text=paste('lm(y~',.vars,',data.frame)'))) } fun(y,data) Call: lm(formula = y ~ x1 + x2, data = data.frame) Coefficients: (Intercept) x12 x2 84.565 18.763 -1.403 ---------------------------------------------------------------------- 2) Matt Wiener fun <- function(y, data.frame){ lm(y ~ ., data = data.frame) } fun(y,data) Call: lm(formula = y ~ ., data = data.frame) Coefficients: (Intercept) x12 x2 84.565 18.763 -1.403 ---------------------------------------------------------------------- 3) Matt Wiener fun <- function(y, data.frame){ .vars <- paste(names(data.frame), collapse="+") lm(as.formula(paste('y~',.vars)),data.frame) } fun(y,data) Call: lm(formula = as.formula(paste("y~", .vars)), data = data.frame) Coefficients: (Intercept) x12 x2 84.565 18.763 -1.403 ---------------------------------------------------------------------- Douglas Bates: same as (2) Spencer Graves: similar to (3) John Fox: mixture of (2) and (3) Roger Peng: similar to (3) Bill Venable: same as (2) Darryl Greig: simmilar to (3) Vadim Ogranovich: same as (2) Peter Dalgaard n <- names(my.data.frame) f <- as.symbol(n[1]) for (i in 2:length(n)) f <- substitute(f+a,list(a=as.symbol(n[i])) f <- substitute(y~f) (I didn't try it. Most likely it doesn't quite work.) Neither did I - Richard ;) -- Dr. Richard Nixon MRC Biostatistics Unit, Cambridge, UK http://www.mrc-bsu.cam.ac.uk/personal/richard Tel: +44 (0)1223 330382, Fax: +44 (0)1223 33038 ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help