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

R语言如何调用父类被重写的函数?以geeglm调用plot.lm为例

解答

1. 类继承逻辑的验证

你对S3类继承的理解是正确的,geeglm返回对象的类属性向量按优先级包含geeglm、gee、glm、lm,正常情况下泛型函数plot找不到对应优先级高的方法时,会自动向后匹配lm类的方法。你直接调用plot.lm报错的原因是:plot.lm是stats包的非导出函数,没有暴露在全局工作环境中,无法直接通过函数名调用。

2. 调用父类被重写S3方法的通用方案

以下两种方法适用于所有S3类的同类场景,可直接复用:

  • 通用方法:使用getS3method()获取指定类的方法后调用,不受方法是否导出的限制
    要调用lm类的plot方法,写法为getS3method("plot", "lm")(你的geeglm对象),如果要调用glm类的方法,只需要把第二个参数改为"glm"即可。
  • 直接访问包非导出方法:使用三个冒号:::访问对应包的内部非导出函数
    plot.lm属于stats包,写法为stats:::plot.lm(你的geeglm对象)。

可运行示例代码

library(geepack)
A = data.frame(x=rnorm(100),y=rbinom(100,1,.5),id=rbinom(100,1,.2))
g = geeglm(y~x,data=A,id=A$id)
# 调用lm类的plot方法的两种写法
getS3method("plot", "lm")(g)
stats:::plot.lm(g)

注意:部分geeglm对象的属性和原生lm对象存在差异,调用时可能出现警告,若出现报错可手动提取对象的拟合值、残差、系数等属性自行绘制诊断图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:04