¿Cómo usar las variables de referencia por cadena de caracteres en una fórmula?

En el siguiente ejemplo mínimo, estoy tratando de usar los valores de una cadena de caracteresvars en una fórmula de regresión. Sin embargo, solo puedo pasar la cadena de nombres de variables ("v2 + v3 + v4") a la fórmula, no el significado real de esta cadena (por ejemplo, "v2" es dat $ v2).

Sé que hay mejores maneras de ejecutar la regresión (por ejemplo,lm(v1 ~ v2 + v3 + v4, data=dat)). Mi situación es más compleja y estoy tratando de averiguar cómo usar una cadena de caracteres en una fórmula. ¿Alguna idea?

Código de abajo actualizado

# minimal example 
# create data frame
v1 <- rnorm(10)
v2 <- sample(c(0,1), 10, replace=TRUE)
v3 <- rnorm(10)
v4 <- rnorm(10)
dat <- cbind(v1, v2, v3, v4)
dat <- as.data.frame(dat)

# create objects of column names
c.2 <- colnames(dat)[2]
c.3 <- colnames(dat)[3]
c.4 <- colnames(dat)[4]

# shortcut to get to the type of object my full code produces
vars <- paste(c.2, c.3, c.4, sep="+")

### TRYING TO SOLVE FROM THIS POINT:
print(vars)
# [1] "v2+v3+v4"

# use vars in regression
regression <- paste0("v1", " ~ ", vars)
m1 <- lm(as.formula(regression), data=dat)

Actualización: @Arun estaba en lo correcto acerca de la falta "" env1 en el primer ejemplo Esto solucionó mi ejemplo, pero todavía tenía problemas con mi código real. En el fragmento de código a continuación, adapté mi ejemplo para reflejar mejor mi código real. Elegí crear un ejemplo más simple al principio pensando que el problema era la cadenavars.

Aquí hay un ejemplo que no funciona :) Utiliza el mismo marco de datosdat creado arriba.

dv <- colnames(dat)[1]
r2 <- colnames(dat)[2]
# the following loop creates objects r3, r4, r5, and r6
# r5 and r6 are interaction terms
for (v in 3:4) {
  r <- colnames(dat)[v]
  assign(paste("r",v,sep=""),r)
  r <- paste(colnames(dat)[2], colnames(dat)[v], sep="*")
  assign(paste("r",v+2,sep=""),r)
}

# combine r3, r4, r5, and r6 then collapse and remove trailing +
vars2 <- sapply(3:6, function(i) { 
                paste0("r", i, "+")
                })
vars2 <- paste(vars2, collapse = '')
vars2 <- substr(vars2, 1, nchar(vars2)-1)

# concatenate dv, r2 (as a factor), and vars into `eq`
eq <- paste0(dv, " ~ factor(",r2,") +", vars2)

Aquí está el problema:

print(eq)
# [1] "v1 ~ factor(v2) +r3+r4+r5+r6"

diferente aregression en el primer ejemplo,eq no trae los nombres de columna (por ejemplo,v3). Los nombres de los objetos (por ejemplo,r3) se conservan. Como tal, los siguienteslm() comando no funciona.

m2 <- lm(as.formula(eq), data=dat)

Respuestas a la pregunta(2)

Su respuesta a la pregunta