Как переопределить функцию S3 по умолчанию в R? - PullRequest
4 голосов
/ 14 февраля 2012

Я хочу переопределить функцию предиката по умолчанию из-за ошибки:

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

Я знаю, где ошибка, и яотправил электронное письмо, которое ожидает одобрения со стороны основного списка рассылки, но в то же время я хотел бы протестировать свою собственную функцию Предсказание, чтобы исправить это.Я понял, что мне нужно переопределить функцию S3 для предиката, но при запуске этого кода:

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

getMethod возвращает мою новую функцию, как и ожидалось, но termplot все еще выполняет старую функцию.Символ methods("predict") также показывает, что старый прогнозируемый файл все еще там, и я думаю, что это может быть порядок вызовов или что-то, что мне нужно настроить.Кто-нибудь знает, как это сделать?

1 Ответ

4 голосов
/ 14 февраля 2012

@ Комментарий Джеймса предлагает определить свой собственный 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)
...