Как отладить неэкспортированную функцию?

Там окончательное руководство, чтобы узнать исходный код для функции, но как вы отлаживаете функцию, которая не экспортируется из пакета, без ручного перехода через исходный код, который вы нашли?

library(plm)
> predict.plm
Error: object 'predict.plm' not found
> plm:::predict.plm
function (object, newdata = NULL, ...) 
{
    tt <- terms(object)
    if (is.null(newdata)) {
        result <- fitted(object, ...)
    }
    else {
        Terms <- delete.response(tt)
        m <- model.frame(Terms, newdata)
        X <- model.matrix(Terms, m)
        beta <- coef(object)
        result <- as.numeric(crossprod(beta, t(X)))
    }
    result
}
<environment: namespace:plm>
> debugonce("predict.plm")
Error in debugonce("predict.plm") : could not find function "predict.plm"
> debugonce("plm:::predict.plm")
Error in debugonce("plm:::predict.plm") : 
  could not find function "plm:::predict.plm"

Ответы

Ответ 1

Это совершенно не очевидно, но предоставление аргумента как символа, а не как строки с кавычками, кажется, работает нормально, т.е.

debugonce(plm:::predict.plm)

а не

debugonce("plm:::predict.plm")

Ответ 2

Один трюк, который я использовал, - это сначала назначить локальный объект:

predict.plm <- plm:::predict.plm

после чего вы можете сделать fix(), debug(),... локальную копию.