【发布时间】:2015-11-28 16:19:13
【问题描述】:
以下函数从数据集中提取线性回归模型。
eqlabels <- function(data, x, y){
m <- lm(x ~ y, data);
eq <- substitute(italic(y) == a + b * italic(x) * "," ~~ italic(r) ^ 2 ~ "=" ~ r2,
list(a = format(coef(m)[1], digits = 3),
b = format(coef(m)[2], digits = 3),
r2 = format(summary(m)$r.squared, digits = 2)))
as.character(as.expression(eq));
return(eq)
}
我们可以看到它在工作
s <- eqlabels(data = iris, x = iris$Sepal.Length, y = iris$Sepal.Width)
s
italic(y) == "6.53" + "-0.223" * italic(x) * "," ~ ~italic(r)^2 ~
"=" ~ "0.014"
问题是我如何使用这个函数和 dplyr 来计算方程和 r2 值,而不是一组,而是几组。例如:
result <- iris %>% group_by(Species) %>% eqlabels(x = iris$Sepal.Length, y = iris$Sepal.Width)
这似乎可行,但它只产生一组,而不是三组方程和 r2。
> result
italic(y) == "6.53" + "-0.223" * italic(x) * "," ~ ~italic(r)^2 ~
"=" ~ "0.014"
?do 似乎是一个 dplyr 函数,但我无法让它工作......
result <- iris %>% group_by(Species) %>% do(eqlabels(x = iris$Sepal.Length, y = iris$Sepal.Width),.)
这个表达式停止函数...
请注意,我试图避免使用 plyr 包中的 ddply。 谢谢
【问题讨论】:
-
我建议看看扫帚和咕噜包。
-
感谢@Richard Scriven。我已经试过了。你是对的,在这种情况下,不需要使用
iris$,但是没有它,函数就会中断......也许需要重新制作函数才能处理吹笛者,或者'group_by ()',或者两者都...?