Мои первые два предложения довольно просты: (1) заключить вызов функции в try()
(который часто предоставляет больше информации о классах S4) и (2) вызвать traceback()
после того, как выдается ошибка (которая иногда дать подсказки, где проблема действительно происходит).
Вызов debug()
не поможет в этом сценарии, поэтому вам нужно использовать trace
или browser
. Со страницы справки по отладке:
"In order to debug S4 methods (see Methods), you need to use trace, typically
calling browser, e.g., as "
trace("plot", browser, exit=browser, signature = c("track", "missing"))
С классами S4 может быть сложно работать; одним из примеров этого является комментарий в документации debug
package (касающийся использования mtrace()
с классами S4):
"I have no plans to write S4 methods, and hope not to have to
debug other people’s!"
A похожий вопрос был задан недавно в R-Help . Рекомендация Дункана Мердока:
"You can insert a call to browser() if you want to modify the source. If
you'd rather not do that, you can use trace() to set a breakpoint in it.
The new setBreakpoint() function in R 2.10.0 will also work, if you
install the package from source with the R_KEEP_PKG_SOURCE=yes
environment variable set. It allows you to set a breakpoint at a
particular line number in the source code."
Я никогда не делал этого раньше себя (и это требует R 2.10.0), но вы можете попробовать установить из источника с R_KEEP_PKG_SOURCE=yes
.
Кстати, вы можете использовать CRAN зеркало NADA в github для просмотра источника.