У меня есть обертка вокруг встроенной функции 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
?