R 中的交互式调试

3

I have a toy R script (test.R) as follows:

myString <- "Hello World"
browser()
print(myString)

我希望能够交互式地调试脚本,因此使用了“browser()”函数。
然而,当我像这样运行脚本时:
Rscript test.R

我看到的是:
Called from: top level 
[1] "Hello World"

即'browser()'调用似乎被跳过了。当我像这样运行脚本时:
R -f test.R

我明白:

>
> myString <- "Hello World"
> browser()
Called from: top level
Browse[1]> print (myString)
[1] "Hello World"
Browse[1]>
>

但是,在'Browse[1]>'处执行不会停止,以便我进行调试。

我在Python中可以插入“import pdb; pdb.set_trace()”进行调试。我正在寻找类似于R的方法。


我建议您逐行在控制台或R Studio中运行脚本。 - Dave2e
我正在处理一组庞大的脚本,例如脚本A调用脚本B,脚本B调用脚本C,脚本C调用脚本D等等。您如何建议在D中调试问题?我只能从A中调用D。我的常规方法是在D中设置断点,然后启动A,但似乎在这里无法实现。感谢您的指引 :) - nickos556
这是关于使用Rstudio进行调试的简介。它可能会提供一个起点:https://support.rstudio.com/hc/en-us/articles/200713843-Debugging-with-RStudio - Dave2e
1个回答

1

看这个了解如何使用 browser()。您将能够在终端上的R交互环境中source('scriptname.R')一个脚本(通过运行R而不是Rscript scriptname.R),然后browser()将表现得非常类似于import pdb; pdb.set_trace()。唯一的主要注意事项是参数 - 您可以通过使用if(interactive())手动配置以使用您在命令行上提供的参数(或者可能有其他方法来实现这一点)。


这是一个部分解决方案,特别适用于您的代码存储在服务器上且无法使用Rstudio服务器(需要付费)的情况。 - piedpiper
这不需要Rstudio来工作。在你的终端中运行R(而不是Rscript),以在终端上获得一个交互式的R会话。然后在R提示符(>,如@piedpiper在上面所说)处加载你的代码。代码将在你的browser()命令处停止运行,并变成一个交互式的终端会话(类似于Python中的pdb)。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接