Irgendwann glm.fit
wird gerufen. Das bedeutet, dass eine der von Ihnen aufgerufenen Funktionen oder eine der von diesen Funktionen aufgerufenen Funktionen entweder Folgendes verwendet glm
: glm.fit
.
Wie ich oben in meinem Kommentar erwähne, ist dies eine Warnung, kein Fehler , der einen großen Unterschied macht. Sie können keines der Debugging-Tools von R über eine Warnung auslösen (mit Standardoptionen, bevor mir jemand sagt, dass ich falsch liege ;-).
Wenn wir die Optionen ändern, um Warnungen in Fehler umzuwandeln, können wir die Debugging-Tools von R verwenden. Von haben ?options
wir:
‘warn’: sets the handling of warning messages. If ‘warn’ is
negative all warnings are ignored. If ‘warn’ is zero (the
default) warnings are stored until the top-level function
returns. If fewer than 10 warnings were signalled they will
be printed otherwise a message saying how many (max 50) were
signalled. An object called ‘last.warning’ is created and
can be printed through the function ‘warnings’. If ‘warn’ is
one, warnings are printed as they occur. If ‘warn’ is two or
larger all warnings are turned into errors.
Also wenn du rennst
options(warn = 2)
Führen Sie dann Ihren Code aus. R gibt einen Fehler aus. An welchem Punkt könnten Sie laufen
traceback()
um den Aufrufstapel zu sehen. Hier ist ein Beispiel.
> options(warn = 2)
> foo <- function(x) bar(x + 2)
> bar <- function(y) warning("don't want to use 'y'!")
> foo(1)
Error in bar(x + 2) : (converted from warning) don't want to use 'y'!
> traceback()
7: doWithOneRestart(return(expr), restart)
6: withOneRestart(expr, restarts[[1L]])
5: withRestarts({
.Internal(.signalCondition(simpleWarning(msg, call), msg,
call))
.Internal(.dfltWarn(msg, call))
}, muffleWarning = function() NULL)
4: .signalSimpleWarning("don't want to use 'y'!", quote(bar(x +
2)))
3: warning("don't want to use 'y'!")
2: bar(x + 2)
1: foo(1)
Hier können Sie die markierten 4:
und höheren Frames ignorieren . Wir sehen, dass dies foo
aufgerufen wurde bar
und bar
die Warnung generiert wurde. Das sollte Ihnen zeigen, welche Funktionen aufgerufen wurden glm.fit
.
Wenn Sie dies jetzt debuggen möchten, können Sie sich an eine andere Option wenden, um R anzuweisen, den Debugger einzugeben, wenn ein Fehler auftritt. Da wir Warnfehler gemacht haben, erhalten wir einen Debugger, wenn die ursprüngliche Warnung ausgelöst wird. Dafür solltest du laufen:
options(error = recover)
Hier ist ein Beispiel:
> options(error = recover)
> foo(1)
Error in bar(x + 2) : (converted from warning) don't want to use 'y'!
Enter a frame number, or 0 to exit
1: foo(1)
2: bar(x + 2)
3: warning("don't want to use 'y'!")
4: .signalSimpleWarning("don't want to use 'y'!", quote(bar(x + 2)))
5: withRestarts({
6: withOneRestart(expr, restarts[[1]])
7: doWithOneRestart(return(expr), restart)
Selection:
Sie können dann in einen dieser Frames treten, um zu sehen, was passiert ist, als die Warnung ausgelöst wurde.
Geben Sie ein, um die oben genannten Optionen auf ihre Standardeinstellungen zurückzusetzen
options(error = NULL, warn = 0)
Für die spezifische Warnung, die Sie zitieren, ist es sehr wahrscheinlich, dass Sie mehr Iterationen im Code zulassen müssen. Wenn Sie herausgefunden haben, was aufgerufen wird glm.fit
, können Sie herausfinden, wie Sie das control
Argument mit glm.control
- siehe ?glm.control
.