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

使用gratia包draw()绘制GAM时触发数据框尺寸匹配错误

解决GAM绘图时Ops.data.frame(guide_loc, panel_loc)错误

问题现象

原本可正常运行的gratia包draw()函数,现在绘制广义可加模型(GAM)或其导数时,持续触发如下错误:

Error in Ops.data.frame(guide_loc, panel_loc) :
‘==’ only defined for equally-sized data frames

用户测试代码如下:

拟合GAM并绘图的代码

library(mgcv)
library(gratia)

gam1 <- mgcv::gam(mpg ~ cyl +
                          s(disp), data = mtcars, method = "REML")

draw(gam1)

# 直接调用包内函数也触发错误
gratia::draw(gam1)

绘制模型导数的触发代码

derivatives1 <- derivatives(gam1,
                             term = "s(disp)",
                            order = 1L,
                             type = "central",
                             n = 250,
                             eps = 1,
                             interval = "simultaneous",
                             n_sim = 500000,
                             unconditional = TRUE)

draw(derivatives1)

用户已尝试重启R、卸载重装包,但问题仍存在。

解决方法

1. 优先更新gratia到最新开发版

这个错误多由gratia与ggplot2的版本不兼容导致(ggplot2内部接口更新后旧版gratia未适配),安装最新开发版可解决大部分此类问题:

# 先安装remotes包(如果没装)
if (!requireNamespace("remotes")) install.packages("remotes")
remotes::install_github("gavinsimpson/gratia")

2. 更新所有依赖包

同时更新mgcv、ggplot2等核心依赖包,避免版本错位:

update.packages(ask = FALSE)

3. 排除全局环境变量干扰

全局环境中若存在与函数内部变量同名的data.frame(比如guide_loc或panel_loc),会干扰gratia的绘图逻辑,清空环境后重试:

rm(list = ls())
library(mgcv)
library(gratia)
# 重新拟合模型并绘图
gam1 <- mgcv::gam(mpg ~ cyl + s(disp), data = mtcars, method = "REML")
draw(gam1)

4. 检查会话信息定位版本冲突

运行sessionInfo()查看包版本,重点确认:

  • gratia版本需≥0.8.1(或开发版)
  • ggplot2版本需与gratia兼容(建议用最新稳定版)
  • mgcv版本需匹配当前R版本

内容的提问来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:43:13