如何从头开始单步执行R脚本?

Gre*_*reg 32 debugging r

我想逐步完成一个R脚本.我在搜索如何执行此操作时看到了"debug"命令,但这似乎只适用于函数.此脚本没有任何功能.

"浏览器"命令看起来很有前景,所以我把"browser()"作为我脚本的第一行,但是当我运行它时似乎没有做任何事情.

如何让脚本在第一行暂停,以便我可以单步执行?

Dan*_*her 21

在RStudio的IDE版本0.98.1102中,我正在绞尽脑汁试图解决这个问题(单步执行没有特定功能的脚本).

RStudio中新脚本的解决方案:

  1. 创建一个新的R脚本(ctrl+shift+n)
  2. 在文件中输入代码
  3. 设置一个break point
    • a)单击要设置break point(红点)或的代码行号的左侧
    • b)添加browser()到要设置的代码行break point
  4. 保存文件
  5. 进入调试模式并通过以下方式获取文件
    • a)选中Source on Save框(Source窗口上方),然后保存文件,
    • b)单击窗口右上角的Source按钮Source,
    • 三)进入debugSource("<yourfilename>")+ enterConsole,或
    • d)进入 ctrl+shift+s
  6. 完成调试过程

有关在RStudio中进行调试的更多步骤,请参阅此帮助文件 (日期为2015年4月23日12:59).


JD *_*ong 8

我偏爱RStudio,所以我推荐以下内容:

  1. 下载RStudio
  2. 打开你的R脚本
  3. 把光标放在第一行
  4. 单击ctrl + enter(PC/Linux)或command + return(Mac)
  5. 重复!

RStudio的一个很好的功能是RStudio服务器可以在无头服务器上运行良好.然后,您可以通过本地计算机上的Web浏览器中的http连接到服务器.在EC2实例上运行R时,我使用此配置.RStudio保持状态,所以如果我在火车上失去了互联网接入,当我收到信号时,RStudio就会在我离开的地方准确接听并且我的远程机器不知道我断开连接并重新连接.请注意,目前仅在FC/CentOS和Debian/Ubuntu上支持RStudio服务器.虽然它可以在*nix的其他变体下编译.

  • 我正在无头服务器上运行,所以我认为IDE不是一个选择. (4认同)
  • "我并不总是在堆栈溢出时复制Dirk的答案......但是当我这样做时,我会添加编号列表." (4认同)
  • `emacs -nw`非常高兴无头服务器,仍然运行ESS,仍然允许你逐步通过行,区域,函数,缓冲区,...... (2认同)

Dir*_*tel 7

一种流行的方法是从"IDE"或编辑器中执行此操作 - Emacs/ESS做得很好,其他人也这样做.

基本思想是将游标下的行,或函数或块,...发送到关联的R进程.其他几位编辑也支持这一点,包括RStudio.我的偏好仍然是ESS,但我相信你能找到合适的东西.

最后,browser()等人可以在R过程中做到这一点,但它的点击率稍微低一点.阅读文档或Chambers"Software for Data Analysis"(Springer,2008)等书籍.

  • 我没有IDE.我刚刚运行Rscript <filename>.有没有办法从那里闯入调试器? (2认同)

Jam*_*mes 6

对于仅考虑完整表达式而不是单独行的R解决方案,请尝试以下方法:

sourcep <- function(file){
  coms <- parse(file)
  for (i in seq_along(coms)){
    print(coms[[i]])
    eval(coms[[i]],envir=.GlobalEnv)
    mess <- paste("Expression",i,"of",length(coms),"parsed. Press <return> to continue.")
    cat(mess)
    readLines(n=1)
  }
}
Run Code Online (Sandbox Code Playgroud)

你打电话给这个叫source(虽然这是更基本的,不包括任何选项).基本上,它用于parse从源文件创建已解析但未评估的表达式列表,然后遍历此列表以打印表达式,在全局环境中对其进行评估,然后发出消息以指示进程.最后一行是创建暂停的行:从中读取单行的调用stdin().


Dav*_*nic 5

您在注释中提到使用Rscript运行代码,但要进行调试,则需要以交互方式运行它。换句话说,要browser开始工作,请启动常规的R控制台和source您的脚本。由于脚本的第一行是browser(),因此您将立即返回到提示,在该提示下可以使用“ n”单步执行代码。但是,由于它是成熟的R提示符,因此您也可以仅通过键入其名称或为其分配值来检查或更改任何变量值。(或者实际上,调用任意R函数。)