À un certain point, glm.fit
. Cela signifie que l'une des fonctions de vous appeler ou de l'une de ces fonctions appelées par ces fonctions est en utilisant soit glm
, glm.fit
.
Aussi, comme je le mentionne dans mon commentaire ci-dessus, c'est un avertissement, pas une erreur, ce qui fait une grande différence. Vous ne pouvez pas déclencher R s outils de débogage à partir d'un avertissement (avec les options par défaut avant que quelqu'un me dit que je me trompe ;-).
Si nous changer les options pour activer les avertissements en erreurs, alors nous pouvons commencer à utiliser des R des outils de débogage. D' ?options
nous avons:
‘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.
Donc, si vous exécutez
options(warn = 2)
puis exécutez votre code, R renvoie une erreur. À ce stade, vous pourriez exécuter
traceback()
pour voir la pile d'appel. Ici est un exemple.
> 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)
Ici, vous pouvez ignorer les images marquées 4:
et plus. Nous voyons qu' foo
appelés bar
et bar
a généré le message d'avertissement. Cela devrait vous montrer les fonctions d'appel glm.fit
.
Maintenant, si vous souhaitez déboguer cela, nous pouvons nous tourner vers une autre option à dire R pour entrer dans le débogueur lorsqu'il rencontre une erreur, et comme nous l'avons fait avertissements d'erreurs, nous allons obtenir un débogueur, lorsque la première alerte est déclenchée. Pour cela, vous devez exécuter:
options(error = recover)
Voici un exemple:
> 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:
Vous pouvez ensuite étape dans l'une des images pour voir ce qui se passait lorsque l'alerte a été levée.
Pour réinitialiser les options ci-dessus à leur valeur par défaut, entrez
options(error = NULL, warn = 0)
Comme pour l'avertissement spécifique que vous citez, il est très probable que vous avez besoin pour permettre à plus d'itérations dans le code. Une fois que vous avez trouvé ce qu'est l'appel de glm.fit
, travailler sur la façon de passer à l' control
argument en utilisant glm.control
- voir ?glm.control
.