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 に答える