使用dplyr包中的函数向qqplot中添加方程,并使用面

使用dplyr包中的函数向qqplot中添加方程,并使用面,r,ggplot2,group-by,dplyr,facet,R,Ggplot2,Group By,Dplyr,Facet,我试图用回归方程和r2为分组数据生成散点图 我可以做一个,但对于分组数据,我在计算所有组的方程式和r2时遇到了麻烦,因为它可以自动提取并添加为注释。 我相信我很接近,只是犯了一些愚蠢的错误,但似乎无法识别它 1-首先,我创建了一个函数,该函数创建了一个模型和一个包含结果的字符串 library(dplyr) eqlabels <- function(iris){ m <- lm(Sepal.Length ~ Sepal.Width, iris); eq <- s

我试图用回归方程和r2为分组数据生成散点图

我可以做一个,但对于分组数据,我在计算所有组的方程式和r2时遇到了麻烦,因为它可以自动提取并添加为注释。
我相信我很接近,只是犯了一些愚蠢的错误,但似乎无法识别它

1-首先,我创建了一个函数,该函数创建了一个模型和一个包含结果的字符串

library(dplyr)    
eqlabels <- function(iris){
  m <- lm(Sepal.Length ~ Sepal.Width, iris);
  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));
}
库(dplyr)

eqlabels好的,让我们再试一次:


执行以下操作:
labelsp3Thank@Yourinium。这也不行。(即使在表达式末尾添加第四个括号,因为我认为它丢失了,以及as.data.frame()中的“.”)。Get error:error in eval(expr,envir,ENCLOSE):缺少参数,没有默认值。如果我现在执行eqlabels(iris),我会得到以下输出:[1]“italic(y)==\“6.53\”+\”-0.223\“*italic(x)*\,“~~ italic(r)^2~\”=\“~\\\“~\\\\\\\\\\”“0.014”,这是您所期望的吗?我想确保我正在跟踪您我可以从函数
eqlabel()
中为一个组获得正确的输出,就像您在这里所做的那样。困难在于下一步:将dplyr函数与group_by()一起使用,谢谢@yourinum。我知道如何使它与ddply一起工作,但由于我不想使用已停止使用的plyr包,所以我正试图用dplyr包中的一些函数替换ddply。问题就从这里开始。好吧,既然我真的理解了你的问题,请查看我编辑的回答。希望它能把你带向正确的方向
 labelsP3 <- iris %>% group_by(Species) %>% do(eqlabels(.))
labelsP3 <- iris %>% group_by(Species) %>% do(with(eqlabels(iris)))
plot3 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(colour = "grey60") +
  facet_grid(Species ~ .) +
  stat_smooth(method = lm) +
  annotate("text", label = labelsP3, parse = TRUE)
    Species                                                                           
    1     setosa  italic(y) == "2.64" + "0.69" * italic(x) * "," 
~italic(r)^2 ~ "=" ~ "0.55"
    2 versicolor italic(y) == "3.54" + "0.865" * italic(x) * "," ~ 
~italic(r)^2 ~ "=" ~ "0.28"
    3  virginica italic(y) == "3.91" + "0.902" * italic(x) * "," ~ 
~italic(r)^2 ~ "=" ~ "0.21"
geom_text(data=labels3, aes(label=V1, x=7, y=2), parse=TRUE)
     Source: local data frame [3 x 2]
        Groups: Species [3]

             Species                                                                   eqlabels(.)
              (fctr)                                                                         (chr)
        1     setosa  italic(y) == "2.64" + "0.69" * italic(x) * "," ~ 
~italic(r)^2 ~ "=" ~ "0.55"
        2 versicolor italic(y) == "3.54" + "0.865" * italic(x) * "," ~ 
~italic(r)^2 ~ "=" ~ "0.28"
        3  virginica italic(y) 

    == "3.91" + "0.902" * italic(x) * "," ~ ~italic(r)^2 ~ "=" ~ "0.21"
    plot3 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point(colour = "grey60") +
      facet_grid(Species ~ .) +
      stat_smooth(method = lm) + 
      geom_text(data=labelsP3, aes(label=`eqlabels(.)`, x=7, y=2), parse=TRUE)
 plot3 + geom_text(data=labelsP3, aes(label=`eqlabels(.)`, vjust = -1, +
hjust=-0.5,x=4, y=0), parse=TRUE)