4

由于错误,我想覆盖默认的 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 仍然存在,我认为这可能是调用顺序或我需要调整的东西。任何熟悉如何做到这一点的人?

4

1 回答 1

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)
于 2012-02-14T11:30:08.260 回答