R Studio 中的奇怪调试结果
Strange debug results in R Studio
我必须这样说,我对 RStudio/R 还是很陌生,所以我希望这不是用户错误。然而,在调试时,我在调试模式下得到了一些奇怪的结果。
1) 代码跳转到另一部分代码,显然没有被调用。
2) 发生这种情况时,荧光笔仅部分突出显示它跳转到的代码,但空白处的箭头指向此部分突出显示的行
3) 代码然后 returns 将它从最初
跳转
我收到警告 "Debug location is approximate because source source code is not available"。这与问题有关吗?
您可以通过安装软件包 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)
当您使用 F10 单步执行时,您会发现代码从第 28、32、54 和 57 行跳转到 L7,并从第 47 行跳转到 L4。
Q1.)为什么这个被调试行的部分高亮是什么意思?
Q2.) 是什么导致代码像这样来回跳转而没有明显的函数调用?
亲切的问候
巴兹
大多数 R 包不包含包源代码的副本(keep.source
选项控制此行为;您可以阅读更多相关信息 here)。当您从此类包中调试代码时,RStudio 必须猜测代码最初的样子以及当前执行点在该代码中的位置。此过程包括一些启发式方法,并且偶尔会误解执行点。所以你看到的不是实际的执行点跳来跳去,而是 RStudio 错误地猜测它在 deparsed 代码中的位置。
来自您自己的 R 脚本(以及来自带有 keep.source
的包)的代码具有源引用(请参阅 R journal article),这允许 RStudio 精确排列代码和执行点。
我无法用你的例子重现这个(它似乎引用了一个它没有声明的变量 m
);如果你能解决这个问题并将它发送给我(jonathan at rstudio dot com),我会看看我们是否可以改进启发式算法,以便这个案例更好地工作。
我必须这样说,我对 RStudio/R 还是很陌生,所以我希望这不是用户错误。然而,在调试时,我在调试模式下得到了一些奇怪的结果。
1) 代码跳转到另一部分代码,显然没有被调用。
2) 发生这种情况时,荧光笔仅部分突出显示它跳转到的代码,但空白处的箭头指向此部分突出显示的行
3) 代码然后 returns 将它从最初
跳转我收到警告 "Debug location is approximate because source source code is not available"。这与问题有关吗?
您可以通过安装软件包 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)
当您使用 F10 单步执行时,您会发现代码从第 28、32、54 和 57 行跳转到 L7,并从第 47 行跳转到 L4。
Q1.)为什么这个被调试行的部分高亮是什么意思?
Q2.) 是什么导致代码像这样来回跳转而没有明显的函数调用?
亲切的问候
巴兹
大多数 R 包不包含包源代码的副本(keep.source
选项控制此行为;您可以阅读更多相关信息 here)。当您从此类包中调试代码时,RStudio 必须猜测代码最初的样子以及当前执行点在该代码中的位置。此过程包括一些启发式方法,并且偶尔会误解执行点。所以你看到的不是实际的执行点跳来跳去,而是 RStudio 错误地猜测它在 deparsed 代码中的位置。
来自您自己的 R 脚本(以及来自带有 keep.source
的包)的代码具有源引用(请参阅 R journal article),这允许 RStudio 精确排列代码和执行点。
我无法用你的例子重现这个(它似乎引用了一个它没有声明的变量 m
);如果你能解决这个问题并将它发送给我(jonathan at rstudio dot com),我会看看我们是否可以改进启发式算法,以便这个案例更好地工作。