2

给定以下功能:

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吞下它。

4

1 回答 1

7

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

f <- function (x, y, data) {
    linm <- lm(formula(paste(y,"~",x)), data)
    summary(linm)$r.squared
}
于 2013-02-07T18:21:49.110 回答