warnings () funktioniert nicht innerhalb einer Funktion? Wie kann man das umgehen?

8
%Vor%

Die Anzahl der Warnungen sollte 1 anstatt 0 sein - Es scheint, dass warnings() nichts zurückgibt, wenn es in einer Funktion aufgerufen wird. Warum? Wie kann man das umgehen, um innerhalb einer Funktion nach aufgetretenen Warnungen zu suchen, und diese ausdrucken?

Ich möchte tryCatch nicht verwenden, weil dann der Wert verloren geht, den die Funktion zurückgibt (sie kann trotzdem einen gültigen Wert zurückgeben, selbst wenn sie eine Warnung generiert hat).

    
Alex Holcombe 26.10.2010, 02:25
quelle

5 Antworten

5

Hier ist der Code für suppressWarnings

%Vor%

Ich habe es ein wenig optimiert, um stattdessen die Anzahl der Warnungen zu zählen.

%Vor%

Ein Test:

%Vor%

Noch ein Test:

%Vor%     
Richie Cotton 26.10.2010, 10:35
quelle
2

Ihr Beispiel gibt eine Warnung zurück.

%Vor%

Die Dokumentation ist nicht explizit, aber ich glaube nicht, dass last.warning gesetzt wird, bis der Anruf beendet ist (besonders, wenn der Anruf Teil dessen ist, was zurückgegeben werden kann).

    
Joshua Ulrich 26.10.2010 02:33
quelle
2

das ist wahrscheinlich eine sehr sehr schlechte Lösung ...

%Vor%

ruft die Funktion zweimal auf, wenn eine Warnung auftritt ... obwohl ich glaube, dass es elegantere Lösungen geben muss

    
kohske 26.10.2010 05:23
quelle
1

Hier ist ein Workaround

%Vor%     
VitoshKa 26.10.2010 09:47
quelle
0

Die Warnungen werden nicht vor Rückgabe der Funktion ausgegeben. Siehe die Dokumentation für Optionen ("warn"):

%Vor%     
VitoshKa 26.10.2010 08:28
quelle

Tags und Links