Я пытаюсь получить сообщение об обработке ошибок в R. Из чтения документов я не могу найти четкое определение правильного синтаксиса.Обработка ошибок в синтаксисе R: tryCatch()
Вот самодостаточными пример:
foo <- function(dat) {
print('Calling foo()')
print(dat[,'r1'])
print(dat[,'r2'])
print(dat[,'r3'])
print('Finished foo()')
return(dat$r3)
}
bar <- function(dat) {
print('Calling bar()')
print(dat[,'r1'])
print(dat[,'r2'])
print('Finished bar()')
return(dat$r2)
}
d1 <- data.frame(r1 = 1:10, r2 = 11:20, r3 = 21:30)
d2 <- d1[c("r1", "r2")]
print('Starting')
print('trying d1')
myVal1 <- tryCatch(foo(d1), error = bar(d1))
print('finished d1')
print('trying d2')
myVal2 <- tryCatch(foo(d2), error = bar(d2))
print('finished d2')
print('Done')
Ожидаемый результат:
[1] "Starting"
[1] "trying d1"
[1] "Calling foo()"
[1] 1 2 3 4 5 6 7 8 9 10
[1] 11 12 13 14 15 16 17 18 19 20
[1] 21 22 23 24 25 26 27 28 29 30
[1] "Finished foo()"
[1] "finished d1"
[1] "trying d2"
[1] "Calling bar()"
[1] 1 2 3 4 5 6 7 8 9 10
[1] 11 12 13 14 15 16 17 18 19 20
[1] "Finished bar()"
[1] "finished d2"
[1] "Done"
Фактический выход:
[1] "Starting"
[1] "trying d1"
[1] "Calling bar()"
[1] 1 2 3 4 5 6 7 8 9 10
[1] 11 12 13 14 15 16 17 18 19 20
[1] "Finished bar()"
[1] "Calling foo()"
[1] 1 2 3 4 5 6 7 8 9 10
[1] 11 12 13 14 15 16 17 18 19 20
[1] 21 22 23 24 25 26 27 28 29 30
[1] "Finished foo()"
[1] "finished d1"
[1] "trying d2"
[1] "Calling bar()"
[1] 1 2 3 4 5 6 7 8 9 10
[1] 11 12 13 14 15 16 17 18 19 20
[1] "Finished bar()"
[1] "Calling foo()"
[1] 1 2 3 4 5 6 7 8 9 10
[1] 11 12 13 14 15 16 17 18 19 20
Error in tryCatchOne(expr, names, parentenv, handlers[[1L]]) :
attempt to apply non-function
Мои вопросы:
Почему это
tryCatch()
звонок в конечном итоге работает обе функции?Почему я могу получить сообщение об ошибке выше?
Неужели у меня такой синтаксис:
tryCatch(someFunction(), error = someOtherFunction())
?
Спасибо!
Вы можете найти http://adv-r.had.co.nz/Exceptions-Debugging.html#condition-handling полезную – hadley