如何覆盖R中的默认S3功能?

时间:2012-02-14 10:36:37

标签: r r-s3

由于存在错误,我想覆盖默认的predict.lm函数:

library(datasets)
# Just a regular linear regression
fit <- lm(mpg~disp+hp+wt+drat, data=mtcars)
termplot(fit, terms=2, se=T)

给出了这个错误:

Error in predict.lm(model, type = "terms", se.fit = se, terms = terms) : 
  subscript out of bounds

我知道错误的位置,我发送了一封等待核心邮件列表批准的电子邮件,但与此同时我想测试自己的predict.lm函数来解决这个问题。我已经明白我需要重新定义S3函数以进行预测,但在运行此代码时:

setMethod("predict", "lm", predict.lm2)
getMethod("predict", "lm")

getMethod按预期返回我的新函数,但是termplot仍然运行旧函数。 methods("predict")还显示旧的predict.lm仍在那里,我认为它可能是调用顺序或我需要调整的东西。有谁熟悉如何做到这一点?

1 个答案:

答案 0 :(得分:4)

@James的评论建议你定义自己的lm2班, 扩展lm,并实施predict.lm2

class(fit) <- c("lm2", class(fit))
predict.lm2 <- function(...) { 
  # The function with your bugfix
  cat("Inside predict.lm2\n")
  predict.lm(...) 
}
termplot(fit, terms=2, se=T)