R Studio 中奇怪的调试结果

Baz*_*man 2 r rstudio

我必须说我对 RStudio/R 还是很陌生,所以我希望这不是用户错误。但是,在调试时,我在调试模式下得到了一些奇怪的结果。

1) 代码在没有明显被调用的情况下跳转到代码的另一部分。

2) 发生这种情况时,荧光笔仅部分突出显示它跳转到的代码,但边距中的箭头指向这条部分突出显示的行

3)然后代码返回到它原来跳离的地方

我收到警告“调试位置是近似的,因为源代码不可用”。这与问题有关吗?

您可以通过安装包 dlm 来复制结果:

https://cran.r-project.org/web/packages/dlm/dlm.pdf

 p<-3
 G=diag(c(0.9963,0.9478,0.7740))
 W=diag(c(0.0026^2,0.0027^2,0.0035^2))
 C0_est=solve(diag(p)-G%*%t(G))*W
 mod2<-dlm(m0=c(0.0501,-0.0251,-0.0116),C0=C0_est,FF=X,V=0.000000001*diag(m),GG=diag(c(0.9963,0.9478,0.7740)),W=diag(c(0.0026^2,0.0027^2,0.0035^2)))
 debugonce(dlmForecast)
 dlmForecast(mod2, nAhead=5, sampleNew=2)
Run Code Online (Sandbox Code Playgroud)

当您使用 F10 逐步执行时,您会发现代码从第 28、32、54 和 57 行跳转到 L7,从第 47 行跳转到 L4。

Q1.) 为什么这部分突出显示被调试的行是什么意思?

Q2.) 是什么导致代码像这样向后和向前跳转而没有明显的函数调用?

亲切的问候

巴兹

Jon*_*han 5

大多数 R 包不包含包源代码的副本(该keep.source选项控制此行为;您可以在此处阅读更多相关信息)。当您从这种包中调试代码时,RStudio 必须猜测代码最初的样子以及当前执行点在该代码中的位置。此过程包括一些启发式方法,并且偶尔会误解执行点。所以你看到的不是实际执行点的跳跃,而是 RStudio 对它在解析代码中的位置做出了错误的猜测。

来自您自己的 R 脚本(以及带有 的包keep.source)的代码具有源代码参考(请参阅R 期刊文章),这使 RStudio 能够精确地排列代码和执行点。

我无法用你的例子重现这个(它似乎引用了一个m它没有声明的变量);如果您能解决这个问题并将其发送给我(rstudio dot com 的乔纳森),我会看看我们是否可以改进启发式方法,以便更好地处理这种情况。