Ответ 1
Это совершенно не очевидно, но предоставление аргумента как символа, а не как строки с кавычками, кажется, работает нормально, т.е.
debugonce(plm:::predict.plm)
а не
debugonce("plm:::predict.plm")
Там окончательное руководство, чтобы узнать исходный код для функции, но как вы отлаживаете функцию, которая не экспортируется из пакета, без ручного перехода через исходный код, который вы нашли?
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"
Это совершенно не очевидно, но предоставление аргумента как символа, а не как строки с кавычками, кажется, работает нормально, т.е.
debugonce(plm:::predict.plm)
а не
debugonce("plm:::predict.plm")
Один трюк, который я использовал, - это сначала назначить локальный объект:
predict.plm <- plm:::predict.plm
после чего вы можете сделать fix()
, debug()
,... локальную копию.