Как использовать ссылочные переменные по символьной строке в формуле?

В приведенном ниже минимальном примере я пытаюсь использовать значения строки символовvars в формуле регрессии. Однако я могу только передать строку имен переменных («v2 + v3 + v4») в формулу, а не реальное значение этой строки (например, «v2» - это dat $ v2).

Я знаю, что есть лучшие способы запустить регрессию (например,lm(v1 ~ v2 + v3 + v4, data=dat)). Моя ситуация более сложная, и я пытаюсь понять, как использовать символьную строку в формуле. есть идеи?

Обновлен код ниже

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

Обновление: @Arun был прав насчет пропавшего "" наv1 в первом примере. Это исправило мой пример, но у меня все еще были проблемы с моим реальным кодом. В приведенном ниже фрагменте кода я адаптировал свой пример, чтобы лучше отразить мой реальный код. Сначала я решил создать более простой пример, думая, что проблема заключается в строкеvars.

Вот пример, который не работает :) Использует тот же фрейм данныхdat создано выше.

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)

Вот проблема:

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

в отличиеregression в первом примереeq не вводит имена столбцов (например,v3). Имена объектов (например,r3) сохраняются Таким образом, следующееlm() Команда не работает.

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

Ответы на вопрос(2)

Ваш ответ на вопрос