0

我很好奇如何编辑 Jayden 的以下解决方案,以便方程可以格式化为 y = bx + a 或 y = bx - a?我想让它看起来尽可能干净。

  lm_eqn = function(m) {

  l <- list(a = format(coef(m)[1], digits = 2),
      b = format(abs(coef(m)[2]), digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));

  if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) == a - b %.% italic(x)*","~~italic(r)^2~"="~r2,l)    
  }

  as.character(as.expression(eq));                 
}

我尝试在 %.% 中消除并引发错误,我尝试反转顺序,但在函数的 if/else 部分中的语法存在问题。我也想在方程的格式中设置它,使得 coeff (a) 没有负号。abs(a) 返回 |a|。感谢您的任何意见!值得赞赏!

这来自另一个线程(在图上添加回归线方程和 R2

4

2 回答 2

1

如果您希望它采用 b*x+a 形式,那么只需:

if (coef(m)[2] >= 0)  {
    eq <- substitute(italic(y) == 
                 b %.% italic(x) + a*","~~italic(r)^2~"="~r2, l)
  } else {
    eq <- substitute(italic(y) == 
               - b %.% italic(x) + a *"," ~~ italic(r)^2 ~"="~r2, l)  
  }

编写 R 表达式需要了解有一个语法规则:token/separator/token,但您可以使用“+”或“-”作为一元分隔符。?plotmath 中的 plotmath 符号表的上部具有可接受的分隔符。空格和换行符被忽略。

于 2013-08-16T22:34:34.737 回答
0

你看到什么错误?这对我来说可以bx ± a按要求提供。您必须将 移至代替abs()的定义并测试而不是 2...abcoef(m)[1]

lm_eqn = function(m) {

  l <- list(a = format(abs(coef(m)[1]), digits = 2),
      b = format(coef(m)[2], digits = 2),
      r2 = format(summary(m)$r.squared, digits = 3));

  if (coef(m)[1] >= 0)  {
    eq <- substitute(italic(y) ==  b %.% italic(x) + a*","~~italic(r)^2~"="~r2,l)
  } else {
    eq <- substitute(italic(y) ==  b %.% italic(x) - a*","~~italic(r)^2~"="~r2,l)    
  }

  as.character(as.expression(eq));                 
}
于 2013-08-16T22:58:18.000 回答