如何用变量调用lm?

时间:2013-02-07 18:17:15

标签: r expression lm

给出以下功能:

f <- function (x, y, data) {
    linm <- lm(y ~ x, data)
    summary(linm)$r.squared
}

以下调用失败:

d <- data.frame(a = c(1, 2), b = c(3, 4), d = c(5, 6))
f('a', 'b', d)

由于lm显然会搜索列xy,而不是用其内容替换变量名称)。我怎么能纠正这个?

我尝试使用表达式和substitute,但无济于事。不幸的是,我并不完全理解R如何处理这些对象以及在哪些上下文中表达式被评估,因此我盲目地飞行。这是我尝试过的(不工作):

exp <- substitute(expression(y ~ x), list(x = x, y = y))
linm <- lm(formula = exp, data = data)

检查时,exp对象实际上看起来很有希望;不幸的是,我无法说服lm吞下它。

1 个答案:

答案 0 :(得分:7)

您可以使用formula功能。以下应该有效:

f <- function (x, y, data) {
    linm <- lm(formula(paste(y,"~",x)), data)
    summary(linm)$r.squared
}