R `options (warning.expression =) замена функций безоговорочно сбрасывает аргументы - PullRequest
0 голосов
/ 03 января 2019

Я бы хотел настроить префикс R для распечатки предупреждений. Стандартная настройка R для warning.expression равна NULL и работает таким образом

options(warning.expression=NULL)
warning("this is a test of the warning system")
Warning message:
this is a test of the warning system
warning(msg="this is a test of the warning system")
Warning message:
this is a test of the warning system
warning(xkqp="this is a test of the warning system")
Warning message:
this is a test of the warning system

Если в Rscript за короткое время (или в функции / закрытии?) Встречается несколько предупреждений, вы получите что-то вроде

Warning messages:
1. this is a test of the warning system
2. second message

Однако настройка текста предупреждения не представляется приемлемой (без залипания сообщения в вызове warning()). Например, если я заменю warning.expression следующим образом:

mywarn<-function(...) { 
   print(paste(
     names(substitute(alist(...))),
     force(substitute(alist(...))),
     sep=" = ", 
     collapse=";"
   ))
}
options(warning.expression=quote(mywarn(...)))
warning("this is a test of the warning system")
[1] " = alist;muffleWarning = function() NULL"
warning(msg="this is a test of the warning system")
[1] " = alist;muffleWarning = function() NULL"

при непосредственном использовании mywarn():

mywarn("this is a test of the warning system", named_parameter="see")
[1] " = alist; = this is a test of the warning system;named_parameter = see"

Самое близкое, что я мог найти к объяснению warning.expression, было из списка рассылки 13 лет назад . Наибольшую помощь в этой теме внесло сообщение Барри Роулингсона , в котором говорится о неполной реализации в источнике C командой R.

Недостаточно самой документации R.

warning.expression: выражение кода R, которое вызывается, если предупреждение генерируется, заменяя стандартное сообщение. Если не ноль, это называется независимо от значения опции warn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...