给定以下功能:
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
显然搜索列x
而y
不是用它们的内容替换变量名)。我该如何纠正这个问题?
我尝试使用表达式和substitute
,但无济于事。不幸的是,我不完全了解 R 如何处理这些对象以及在哪些上下文中评估表达式,因此我盲目地飞行。这是我尝试过的(不工作):
exp <- substitute(expression(y ~ x), list(x = x, y = y))
linm <- lm(formula = exp, data = data)
检查时,该exp
对象实际上看起来很有希望;不幸的是,我无法说服lm
吞下它。