【问题标题】:Find where an error has occured in R查找 R 中发生错误的位置
【发布时间】:2014-09-26 08:51:06
【问题描述】:

我在 Rstudio 中运行一个脚本并得到以下特定于我的代码的错误(警告可能来自初始错误):

Error in `[<-`(`*tmp*`, mon, n, value = 0) : subscript out of bounds
In addition: There were 50 or more warnings (use warnings() to see the first 50)

我尝试使用 ctrl+F 搜索我的脚本,但似乎这不在脚本中。我尝试使用traceback() 并得到No traceback available 我尝试通过source(filepath)error(options=recover) 中的R shell 运行脚本并获得以下菜单:

Enter a frame number, or 0 to exit   

1: source("C:\\Users\\Patrick\\Google Drive\\FIDS\\MESc\\Thesis\\KNN-CADv4\\RModel\\Analysis_UI_modified.r")
2: withVisible(eval(ei, envir))
3: eval(ei, envir)
4: eval(expr, envir, enclos)

但我不知道该怎么办。我在 SO 上经历了很多不同的答案,并尝试了他们上面提到的内容,但仍然无法解决这个问题。为什么这些似乎是 R 的一个问题?

我是否可以按照任何步骤来查找脚本中此错误对应的哪一行(显然无需手动遍历每一行...)?我通常使用 Python 和 Matlab,我通常可以得到发生错误的行并处理需要修复的内容,但这似乎对 R 来说并非易事。错误本身很明显,但我需要知道它在哪里。

这是我在 Windows 7 上使用的 R:

R version 3.1.0 (2014-04-10) -- "Spring Dance"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

【问题讨论】:

  • 构建一个由您的代码/脚本组成的虚拟函数,调用该函数然后尝试traceback,它应该会指出错误的来源
  • @Osssan 我按照你提到的finderror&lt;- function(){ 'Where script is' return(0)} 在控制台中运行了该函数并得到了同样的错误。试过traceback 并得到了这个1: finderror()。似乎仍然没有行号。即使我得到了显示该行的样子的东西,我也可以轻松地在脚本中搜索它

标签: r debugging error-handling rstudio


【解决方案1】:

前面的那个标志……你已经进入了…… BrowserZone:

 ?browser   # read the controls documentation

然后搜索:[r] browser debug

如果您在使用debug('func_name") 设置调试标志后运行该函数,那么浏览器应该告诉您错误是在哪一行引发的。其他选项:当这是关于 SO 的早期问题时,Shane 建议:

options(error = quote({dump.frames(to.file=TRUE); q()}))

可以设置断点并在具有特定代码的特定行号处恢复代码,尽管我认为这也不能完全满足您的需求。

?findLineNum
?setBreakpoint   # both on same page.

如果您正在构建一个包,您可能会通过设置环境变量受益: R_KEEP_PKG_SOURCE=是

您在某处创建了“mon”变量。查找将名为“mon”的对象或列分配给值的代码。

【讨论】:

  • 浏览器和调试功能很有帮助。但是,我获得的有关错误的唯一信息与问题中描述的相同。 mon 是一个计数器变量,用于在循环中遍历许多数组。在其中一个数组中,索引超出范围,导致错误。还有其他方法可以找到我只是想看看有没有更方便的错误
猜你喜欢
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2014-10-11
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多