2016-07-27 33 views
1

Ich habe eine Quelldatei (in Knitr) mit Plots, die eine bestimmte Schriftfamilie verwenden. Ich möchte die WarnmeldungenUnterdrücken Sie jede Emission einer bestimmten Warnmeldung

In grid.Call (L_textBounds, as.graphicsAnnot (x $ label) zu unterdrücken, ...: Schriftart Familie nicht in Windows-Schriftart-Datenbank gefunden

library(ggplot2) 

ggplot(mtcars, aes(mpg, cyl, label = gear)) + 
    geom_text(family = "helvet") 

ich weiß, ich kann alle Warnmeldungen in einem Skript unterdrücken options(warn = -1), und ich weiß, wie suppressWarnings zu verwenden. ich habe auch einen bestimmten Chunk in einem tryCatch umgeben kann.

gibt es eine Möglichkeit zu suppres s nur die Warnung über während eine Datei?

+0

Ich habe noch nicht gesehen, dass dies umgesetzt wird, aber ich würde gerne falsch bewiesen werden. –

+0

Gibt 'options (" warning.expression ") einen Hinweis? Ich kann es nur verwenden, um alle Warnmeldungen vollständig zu entfernen. – Hugh

+0

Diese Option ist zum Ersetzen von Warnmeldungen durch etwas maßgeschneiderteres verfügbar. Rs Erfassung von Nachrichten ist nicht seine Stärke (ich denke gerade an einen Vergleich mit Python), aber es ist gut genug für Statistiken. :) –

Antwort

2

Verwenden

withCallingHandlers({ 
    <your code> 
}, warning=function(w) { 
    if (<your warning>) 
     invokeRestart("muffleWarning") 
}) 

Zum Beispiel

x = 1 
withCallingHandlers({ 
    warning("oops") 
    warning("my oops ", x) 
    x 
}, warning=function(w) { 
    if (startsWith(conditionMessage(w), "my oops")) 
     invokeRestart("muffleWarning") 
}) 

erzeugt Ausgang

[1] 1 
Warning message: 
In withCallingHandlers({ : oops 
> 

Die Einschränkung ist, dass die conditionMessage in einer anderen Sprache übersetzt werden kann (insbesondere, wenn die von einer Basisfunktion), damit der Text nicht zuverlässig identifiziert werden kann.

Siehe Selective suppressWarnings() that filters by regular expression.