Karl Forner
2013-Nov-29 10:30 UTC
[Rd] How to catch warnings sent by arguments of s4 methods ?
Hello, I apologized if this had already been addressed, and I also submitted this problem on SO: http://stackoverflow.com/questions/20268021/how-to-catch-warnings-sent-during-s4-method-selection Example code: setGeneric('my_method', function(x) standardGeneric('my_method') ) setMethod('my_method', 'ANY', function(x) invisible()) withCallingHandlers(my_method(warning('argh')), warning = function(w) { stop('got warning:', w) }) # this does not catch the warning It seems that the warnings emitted during the evaluation of the arguments of S4 methods can not get caught using withCallingHandlers(). Is this expected ? Is there a work-around ? Best, Karl Forner
Karl Forner
2013-Dec-02 09:18 UTC
[Rd] How to catch warnings sent by arguments of s4 methods ?
Hi, Just to add some information and to clarify why I feel this is an important issue. If you have a S4 method with a default argument, it seems that you can not catch the warnings emitted during their evaluation. It matters because on some occasions those warnings carry an essential information, that your code needs to use. Martin Morgan added some information about this issue on: http://stackoverflow.com/questions/20268021/how-to-catch-warnings-sent-during-s4-method-selection Basically the C function R_dispatchGeneric uses R_tryEvalSilent to evaluate the method arguments, that seems no to use the calling handlers. Best, Karl On Fri, Nov 29, 2013 at 11:30 AM, Karl Forner <karl.forner at gmail.com> wrote:> Hello, > > I apologized if this had already been addressed, and I also submitted > this problem on SO: > http://stackoverflow.com/questions/20268021/how-to-catch-warnings-sent-during-s4-method-selection > > Example code: > setGeneric('my_method', function(x) standardGeneric('my_method') ) > setMethod('my_method', 'ANY', function(x) invisible()) > > withCallingHandlers(my_method(warning('argh')), warning = function(w) > { stop('got warning:', w) }) > # this does not catch the warning > > It seems that the warnings emitted during the evaluation of the > arguments of S4 methods can not get caught using > withCallingHandlers(). > > Is this expected ? Is there a work-around ? > > Best, > Karl Forner