1) Просто используйте lm(df2)
или, если lm
имеет дополнительные столбцы сверх того, что показано в вопросе, но мы просто хотим регрессировать на x1
и x2
, затем
df3 <- df2[c("y", var, "x2")]
lm(df3)
Следующее является необязательным и применяется только в том случае, если важно, чтобы формула появлялась в выходных данных, как если бы она была задана явно.Вычислите формулу fo
, используя первую строку ниже, а затем выполните lm
, как во второй строке:
fo <- formula(model.frame(df3))
fm <- do.call("lm", list(fo, quote(df3)))
или просто выполните lm
, как в первой строке ниже, а затем запишите формулу вэто как во второй строке:
fm <- lm(df3)
fm$call <- formula(model.frame(df3))
Любой из них дает это:
> fm
Call:
lm(formula = y ~ x1 + x2, data = df3)
Coefficients:
(Intercept) x1 x2
0.44752 0.04278 0.05011
2) символьная строка lm
принимает символьную строку для формулытак что это тоже работает.fn$
вызывает замену в символьных аргументах.
library(gsubfn)
fn$lm("y ~ $var + x2", quote(df2))
или за счет более сложного кода, без gsubfn:
do.call("lm", list(sprintf("y ~ %s + x2", var), quote(df2)))
или если вас это не волнуетчто формула отображается без var
, а затем просто:
lm(sprintf("y ~ %s + x2", var), df2)