2016-05-04 8 views
5

Ich Debuggen einige Code, der mehrere Warnungen gibt, aber ich versuche, den Code zu stoppen, wenn ich eine bestimmte Warnung, damit ich die Umgebung sehen kann.Catch spezifische Warnung und andere ignorieren

Zum Beispiel:

myfun <- function(){ 
    warning("The wrong warning") 
    warning("The right warning") 
    print("The end of the function") 
} 

tryCatch(myfun(), 
     warning = function(w){ 
      if(grepl("right", w$message)){ 
      stop("I have you now") 
      } else { 
      message(w$message) 
      } 
     }) 

Was ich möchte, ist geschehen für die Funktion „an der rechten Warnung“ zu stoppen, aber der Haken stoppt, sobald er seine erste Warnung erhält. Wie kann ich Warnungen, die nicht von Interesse sind, überspringen und auf diejenigen, die mich interessieren, verzichten?

Antwort

2

Ich glaube withCallingHandlers ist, was Sie wollen: Disregarding simple warnings/errors in tryCatch()

withCallingHandlers(myfun(), 
    warning = function(w){ 
    if(grepl("right", w$message)){ 
     stop("I have you now") 
    } else { 
     message(w$message) 
    } 
    }) 
+0

, die auf sie tot ist. Ich werde meine Frage als Duplikat kennzeichnen. –