Подтвердить что ты не робот

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

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

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"
4b9b3361

Ответ 1

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

debugonce(plm:::predict.plm)

а не

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

Ответ 2

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

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

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