如果由于惰性评估而未知包,我如何在R中有效调试.我想保留基本browser()
功能,因为它工作得很好 - 即使是testthat package
.如以下文章中所述,--with-keep.source
在"项目选项=>构建工具"中为我的项目设置.
要重现该行为,请创建一个TestDebug
包含的包
myfun <- function(a,b) {return(a+b)}
Run Code Online (Sandbox Code Playgroud)
和一个脚本 example.R
{
browser()
TestDebug::myfun(1,2)
}
Run Code Online (Sandbox Code Playgroud)
编辑:还应涵盖TestDebug::myfun(1,2)
呼叫的情况otherpackage::myfun2(1,2)
.我认为情况应该发生在每个"真正"的包装中?
要复制此错误,您必须首先安装包 MARSS。我还包括用户指南。
https://cran.r-project.org/web/packages/MARSS/vignettes/UserGuide.pdf
可以使用第 35 页上的示例调用
dat = t(harborSealWA)
dat = dat[2:nrow(dat),]
debugonce(MARSSkem)
kemfit = MARSS(dat)
Run Code Online (Sandbox Code Playgroud)
在 RStudio 中为 MARSSkem 触发 debugmode 时,您会发现无法设置断点!屏幕顶部还有一条调试消息说:“调试位置是近似的,因为源代码不可用”。我想这就是我不能设置断点的原因!
问题是我试图定位的错误(在所示的简单示例中不存在)是在第 55 次迭代中发现的,并且每次迭代都包含多个 for 循环,每个循环有 100 个循环!手动一步一步根本不实用!
Q1.) 有没有办法在 R studio 中为这个函数设置断点?
Q2.) 如果不是,我找到这个问题的最佳选择是什么?(理想情况下,我不想弄乱包源代码,但如果它是唯一的选择,我会这样做)
谢谢
巴兹