给出以下功能:
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
吞下它。
答案 0 :(得分:7)
您可以使用formula
功能。以下应该有效:
f <- function (x, y, data) {
linm <- lm(formula(paste(y,"~",x)), data)
summary(linm)$r.squared
}