Ostrzeżenia generowane gdy argumenty oceny S4 funkcji generycznych nie można się zarazić korzystając withCallingHandlers().Jak złapać ostrzeżeń wysyłanych podczas S4 Wybór metody
Ilustracja normalnego zachowania withCallingHandlers:
### simple function that sends a warning
send_warning <- function() {
warning('send_warning')
}
send_warning()
# Warning message:
# In send_warning() : send_warning
### the warning can be caught by withCallingHandlers
withCallingHandlers(send_warning(), warning = function(w)
{ stop('got warning:', w) })
# Error in (function (w) :
# got warning:simpleWarning in send_warning(): send_warning
Teraz zróbmy ostrzeżenie być emitowane podczas wysyłki S4:
### simplest method ever
setGeneric('my_method', function(x) standardGeneric('my_method'))
setMethod('my_method', 'ANY', function(x) str(x))
### call it with an argument that produces a warning: seems to work
my_method(warning('argh'))
# chr "argh"
# Warning message:
# argh
### !!! BUT it is not caught !!!!!!!!!!!!!!!!!!:
withCallingHandlers(my_method(warning('argh')), warning = function(w)
{ stop('got warning:', w) })
# chr "argh"
# Warning message:
# argh
ostatni przykład, aby pokazać, że to nie nastąpi w ciągu Wywołanie metody S4:
setGeneric('my_method2', function(x) standardGeneric('my_method2'))
setMethod('my_method2', 'ANY', function(x) warning('my_method2'))
my_method2()
# Warning message:
# In my_method2() : my_method2
### warning is caught
withCallingHandlers(my_method2(), warning = function(w)
{ stop('got warning:', w) })
# Error in (function (w) :
# got warning:simpleWarning in my_method2(): my_method2
Z tego, co rozumiem, wynika, że szczególne zachowanie ostrzeżeń emitowanych podczas wysyłki S4. Chciałbym wiedzieć, dlaczego i jak je złapać.
Mam niewyraźne wspomnienie tego lub czegoś podobnego, omówione na liście mailingowej R-dev ... – Spacedman