如何找出错误发生的位置?
我有一个像这样的双循环
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
}
在这段代码中我收到了一个错误(这就像max(i)中的错误......) 内环完美运作。因此,通过省略外部循环并手动输入公司ID,直到出现错误,我发现哪家公司出了问题。我的data.frame在一个向量中有字母,每个特定公司都有每日回报。
下一次:在R中是否有办法找出错误出现的WHERE(或此处为FOR WHICH COMPANY)?它可以节省很多时间!
答案 0 :(得分:4)
我喜欢使用的是:
options(error = recover)
您只需在会话开始时运行一次(或将其添加到.Rprofile
文件中)
之后,每次抛出错误时,都会显示导致错误的函数调用堆栈。您可以选择任何这些调用,就像您在browser()
模式下运行该命令一样:您将能够查看调用环境中的变量并浏览代码。
?recover
的更多信息和示例。
答案 1 :(得分:0)
如果没有我们可以运行的显式代码,很难知道,但我的猜测是将代码更改为
for(i in companies) {
for(j in dates) {
或者
for(i in 1:length(companies)) {
for(j in 1:length(dates)) {
可以解决问题。请注意第二个循环中的(
。如果没有,那么编辑您的示例以使某些代码/数据产生相同的错误可能是个好主意。
要弄清楚它出现在哪里,您可以随时在代码中的适当位置添加print(i)
或类似内容。