У меня есть оболочка для встроенной функции warning()
в R, которая в основном вызывает warning(sprintf(...))
:
warningf <- function(...)
warning(sprintf(...))
Это потому, что я использую warning(sprintf(...))
так часто, что я решил сделатьфункции из него (это в пакете, у меня есть функции, которые я часто использую).
Затем я использую warningf
, когда пишу функции.т.е. вместо того, чтобы писать:
f <- function() {
# ... do stuff
warning(sprintf('I have %i bananas!',2))
# ... do stuff
}
Я пишу:
f <- function() {
# ... do stuff
warningf('I have %i bananas!',2)
# ... do stuff
}
Если я позвоню первым f()
, я получу:
Warning message:
In f() : I have 2 bananas!
Этохорошо - он говорит мне, откуда пришло предупреждение f()
и что пошло не так.
Если я позвоню второму f()
, я получу:
Warning message:
In warningf("I have %i bananas!",2) : I have 2 bananas!
Это не идеально -он говорит мне, что предупреждение было в функции warningf
(конечно, потому что это функция warningf
, которая вызывает warning
, а не f
), маскируя тот факт, что оно на самом деле пришло из функции f()
.
Итак, мой вопрос: можно ли как-нибудь «поднять» вызов warning
, чтобы он отображал сообщение warning in f()
вместо warning in warningf
?