grautur - 1 year ago 59
R Question

# how to succinctly write a formula with many variables from a data frame?

Suppose I have a response variable and a data containing three covariates (as a toy example):

``````y = c(1,4,6)
d = data.frame(x1 = c(4,-1,3), x2 = c(3,9,8), x3 = c(4,-4,-2))
``````

I want to fit a linear regression to the data:

``````fit = lm(y ~ d\$x1 + d\$x2 + d\$y2)
``````

Is there a way to write the formula, so that I don't have to write out each individual covariate? For example, something like

``````fit = lm(y ~ d)
``````

(I want each variable in the data frame to be a covariate.) I'm asking because I actually have 50 variables in my data frame, so I want to avoid writing out
`x1 + x2 + x3 + etc`
.

There is a special identifier that one can use in a formula to mean all the variables, it is the `.` identifier.

``````y <- c(1,4,6)
d <- data.frame(y = y, x1 = c(4,-1,3), x2 = c(3,9,8), x3 = c(4,-4,-2))
mod <- lm(y ~ ., data = d)
``````

You can also do things like this, to use all variables bar one:

``````mod <- lm(y ~ . - x3, data = d)
``````

Technically, `.` means all variables not already mentioned in the formula. For example

``````lm(y ~ x1 * x2 + ., data = d)
``````

where `.` would only reference `x3` as `x1` and `x2` are already in the formula.