Como usar variáveis ​​de referência por cadeia de caracteres em uma fórmula?

No exemplo mínimo abaixo, estou tentando usar os valores de uma cadeia de caracteresvars em uma fórmula de regressão. No entanto, só posso passar a string de nomes de variáveis ​​("v2 + v3 + v4") para a fórmula, não o significado real dessa string (por exemplo, "v2" é dat $ v2).

Eu sei que existem maneiras melhores de executar a regressão (por exemplo,lm(v1 ~ v2 + v3 + v4, data=dat)). Minha situação é mais complexa e estou tentando descobrir como usar uma cadeia de caracteres em uma fórmula. Alguma ideia?

Atualizado abaixo do código

# 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)

Atualização: @Arun estava correto sobre a falta "" dev1 no primeiro exemplo. Isso resolveu meu exemplo, mas ainda estava tendo problemas com meu código real. No pedaço de código abaixo, adaptei o meu exemplo para refletir melhor o meu código real. Eu escolhi criar um exemplo mais simples a princípio pensando que o problema era a stringvars.

Aqui está um exemplo que não funciona :) Usa o mesmo quadro de dadosdat criado acima.

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)

Aqui está o problema:

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

Ao contrárioregression no primeiro exemplo,eq não traz os nomes das colunas (por exemplo,v3). Os nomes dos objetos (por exemplo,r3) são mantidos. Como tal, as seguinteslm() comando não funciona.

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

questionAnswers(2)

yourAnswerToTheQuestion