You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggplot2绘制回归直线时“$ operator is invalid”错误求助

修复回归方程标题报错的问题

我来帮你搞定这个$ operator is invalid for atomic vectors错误!咱们一步步拆解问题和解决方案:

错误根源

你调用eq(x)时,传入的是原子向量x,但你的eq()函数里用了coef(x)和summary(x)$r.squared——这两个函数都是给**线性模型对象(lm类)**用的,直接传数值向量肯定会报错。另外你的eq()函数还有两处语法错误:substitute语句缺了括号,as.ep是拼写错误(应该是as.expression)。

修复方案

1. 重新设计eq()函数

让函数接收一个拟合好的线性模型对象,而不是单独的x向量,同时修正语法错误,还可以把R²也加入标题:

eq <- function(lm_model) {
  lm_coef <- list(
    a = round(coef(lm_model)[2], digits = 2),
    b = round(coef(lm_model)[1], digits = 2),
    r2 = round(summary(lm_model)$r.squared, digits = 2)
  )
  # 生成包含R²的回归方程文本
  lm_eq <- substitute(y == a * x + b ~~ (R^2 == r2), lm_coef)
  as.character(as.expression(lm_eq))
}

2. 调整绘图代码

因为你用了scale_y_log10(),所以需要先拟合对应对数转换后的y的线性模型,再把模型传给eq()函数:

library(ggplot2)

x <- c(1,2,2,2,3,3,4,5,5,6,6,6,6,7,8,9,9,11,11,11,15,15,16,16,16,16,17,18,18,18)
y <- c(1,2,4,3,3,2,5,4,6,3,7,7,6,7,8,4,5,4,9,9,13,14,15,15,15,16,17,19,19,20)

# 拟合与geom_smooth对应的线性模型(log10(y)~x)
fit_model <- lm(log10(y) ~ x)

p <- ggplot(data = NULL, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(method = lm, se = FALSE, color = "black") +
  scale_y_log10() +
  ggtitle(eq(fit_model)) +
  theme(plot.title = element_text(hjust = 0.5, size = 20))

p

这样运行后,你就能得到带有正确回归方程(包含R²)的散点图,再也不会报错啦!

内容的提问来源于stack exchange,提问作者Wapitix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:21:33