找出调试时R中发生错误的位置

cpt*_*ptn 5 debugging for-loop r

我怎样才能找出错误发生的位置?

我有这样的双循环

companies <- # vector with all companies in my data.frame
dates <- # vector with all event dates in my data.frame

for(i in 1:length(companies)) { 
  events_k <- # some code that gives me events of one company at a time

  for{j in 1:nrow(events_k)) {
  # some code that gives me one event date at a time
  results <- # some code that calculates stuff for that event date

}

mylist[[i]] <- results # store the results in a list
}
Run Code Online (Sandbox Code Playgroud)

在这段代码中我得到了一个错误(这就像max(i)中的错误......)内部循环完美地运行.因此,通过省略外部循环并手动输入公司ID,直到出现错误,我发现哪家公司出了问题.我的data.frame在一个向量中有字母,该特定公司的每日回报.

下一次:在R中是否有办法找出错误出现的WHERE(或此处为FOR WHICH COMPANY)?它可以节省很多时间!

flo*_*del 5

我喜欢用的是:

options(error = recover)
Run Code Online (Sandbox Code Playgroud)

您只需在会话开始时运行一次(或将其添加到您的.Rprofile文件中)

之后,每次抛出错误时,您都会看到导致错误的函数调用堆栈。您可以选择这些调用中的任何一个,就像您在browser()模式下运行该命令一样:您将能够查看调用环境中的变量并浏览代码。

更多信息和示例请访问?recover


cof*_*nky 0

如果没有明确的代码,我们很难知道我们可以运行,但我的猜测是,将代码更改为

 for(i in companies) { 
    for(j in dates) {
Run Code Online (Sandbox Code Playgroud)

或者替代地

 for(i in 1:length(companies)) { 
    for(j in 1:length(dates)) {
Run Code Online (Sandbox Code Playgroud)

可能会解决问题。注意(第二个循环中的 。如果没有,最好编辑您的示例以获取一些产生相同错误的代码/数据。

要找出它发生的位置,您始终可以print(i)在代码中合适的位置添加类似的内容。