Это связано с некоторыми другими вопросами, но я не могу понять, как применить ответ, поэтому я задаю новый вопрос.
Я пытаюсь выяснить неинформативную ошибку из фрагмента кода, который выглядит так:
tryCatch(MainLoop(),
error=function(e) { fatal(lgr, paste('caught fatal error:', as.character(e)));
exit.status <<- 1 })
Проблема заключается в том, что ошибка, похоже, связана с чем-то, скрытым в библиотечной функции:
Error in nrow(x): (subscript) logical subscript too long
То, что nrow
отсутствует в моем коде, поскольку вышеописанная выше ошибка уровня C применяется только к типу индексирования, который никогда не происходит ни в одном из моих вызовов nrow
.
Поэтому мне бы очень хотелось получить трассировку стека из этого tryCatch
. Здесь аналогичная задача:
x <- function() { y(); }
y <- function() { z(); }
z <- function() { stop("asdf") }
> x()
Error in z() : asdf
> tryCatch(x(), error=function(e) { print(conditionCall(e)) } )
z()
> tryCatch(x(), error=function(e) { dump.frames() } )
> last.dump
$`tryCatch(x(), error = function(e) {
dump.frames()
})`
<environment: 0x1038e43b8>
$`tryCatchList(expr, classes, parentenv, handlers)`
<environment: 0x1038e4c60>
$`tryCatchOne(expr, names, parentenv, handlers[[1]])`
<environment: 0x1038e4918>
$`value[[3]](cond)`
<environment: 0x1038ea578>
attr(,"error.message")
[1] "asdf"
attr(,"class")
[1] "dump.frames"
Как получить трассировку стека, включающую вызов y()
? Мне нужно прекратить использование tryCatch
? Какой лучший способ?