Thaler, Thorn, LAUSANNE, Applied Mathematics
2010-Dec-13 18:10 UTC
[R] predict.lm[e] with formula passed as a variable
Dear all, In a function I paste a string and convert it to a formula which I pass to lm[e]. The idea is to write a function which takes the name of the response variable and the explanatory variable and the data frame as an argument and calculates an lm[e]. (see example below) This works fine, but if I want to make a prediction on this model, R complains that the object holding the formula ("form") cannot be found. How can I circumvent this problem? I think I've to provide somehow an environment to "predict" holding the binding for the variable "form", such that predict can resolve the variable, but I've no clue how to do this. Help is very much appreciated. BR + thanks, Thorn ----------------8<---------------- df <- data.frame(x=factor(rep(1:2, each=10)), y=c(rnorm(10), rnorm(10, 10)), z=rep(1:10,2)) test <- function(df, resp, x, rf, LM = FALSE) { form <- paste(resp, x, sep = " ~ ") form <- as.formula(form) if (LM) { mod <- lm(form, data=df) } else { rand <- as.formula(paste("~1", rf, sep = " | ")) mod <- lme(form, data = df, random = rand) } x.new <- data.frame(levels(df[[x]])) names(x.new) <- x if (LM) predict(mod, x.new) else predict(mod, x.new, level=0) }> test(df, "y", "x", "z")Error in eval(expr, envir, enclos) : object 'form' not found ---------------->8----------------
Thorn, Here's how I do it: retval <- list(as.name('lm'), formula=as.formula(paste(Response, "~", Explan, sep='')), data=as.name(Data)) #... optionally add other arguments retval <- eval(as.call(retval)) Dave From: "Thaler, Thorn, LAUSANNE, Applied Mathematics" <Thorn.Thaler@rdls.nestle.com> To: <r-help@r-project.org> Date: 12/13/2010 12:16 PM Subject: [R] predict.lm[e] with formula passed as a variable Sent by: r-help-bounces@r-project.org Dear all, In a function I paste a string and convert it to a formula which I pass to lm[e]. The idea is to write a function which takes the name of the response variable and the explanatory variable and the data frame as an argument and calculates an lm[e]. (see example below) This works fine, but if I want to make a prediction on this model, R complains that the object holding the formula ("form") cannot be found. How can I circumvent this problem? I think I've to provide somehow an environment to "predict" holding the binding for the variable "form", such that predict can resolve the variable, but I've no clue how to do this. Help is very much appreciated. BR + thanks, Thorn ----------------8<---------------- df <- data.frame(x=factor(rep(1:2, each=10)), y=c(rnorm(10), rnorm(10, 10)), z=rep(1:10,2)) test <- function(df, resp, x, rf, LM = FALSE) { form <- paste(resp, x, sep = " ~ ") form <- as.formula(form) if (LM) { mod <- lm(form, data=df) } else { rand <- as.formula(paste("~1", rf, sep = " | ")) mod <- lme(form, data = df, random = rand) } x.new <- data.frame(levels(df[[x]])) names(x.new) <- x if (LM) predict(mod, x.new) else predict(mod, x.new, level=0) }> test(df, "y", "x", "z")Error in eval(expr, envir, enclos) : object 'form' not found ---------------->8---------------- ______________________________________________ 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. [[alternative HTML version deleted]]