creating a formula on-the-fly inside a function
On Thu, 2005-03-03 at 10:28 -0500, Dr Carbon wrote:
I have a function that, among other things, runs a linear model and
returns r2. But, the number of predictor variables passed to the
function changes from 1 to 3. How can I change the formula inside the
function depending on the number of variables passed in?
An example:
get.model.fit <- function(response.dat, pred1.dat, pred2.dat = NULL,
pred3.dat = NULL)
{
res <- lm(response.dat ~ pred1.dat + pred2.dat + pred3.dat)
summary(res)$r.squared
# other stuff happens here...
}
y <- rnorm(10)
x1 <- y + runif(10)
x2 <- y + runif(10)
x3 <- y + runif(10)
get.model.fit(y, x1, x2, x3)
get.model.fit(y, x1, x2)
get.model.fit(y, x1)
Consider using as.formula() to take a character vector that you pass as
an argument instead of specifying each IV separately:
get.model.fit <- function(my.form)
{
res <- lm(as.formula(my.form))
summary(res)$r.squared
# other stuff happens here...
}
Then call it with:
get.model.fit("y ~ x1 + x2 + x3")
Internally, the vector will be converted to:
as.formula("y ~ x1 + x2 + x3")
y ~ x1 + x2 + x3 Doing it this way provides for greater flexibility if you want to use a more complicated formula construct. See ?as.formula for more information and further examples, including the use of paste() if you want to separate the DV from the IVs for an additional approach for a long set of similarly named IV's (ie x1:x25). HTH, Marc Schwartz