À un moment donné, glm.fit
est appelé. Cela signifie que l' une des fonctions que vous appelez ou l' une des fonctions appelées par ces fonctions est en utilisant soit glm
, glm.fit
.
De plus, comme je l'ai mentionné dans mon commentaire ci-dessus, c'est un avertissement et non une erreur , ce qui fait une grande différence. Vous ne pouvez déclencher aucun des outils de débogage de R à partir d'un avertissement (avec les options par défaut avant que quelqu'un ne me dise que je me trompe ;-).
Si nous modifions les options pour transformer les avertissements en erreurs, nous pouvons commencer à utiliser les outils de débogage de R. De ?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.
Alors si tu cours
options(warn = 2)
puis exécutez votre code, R lancera une erreur. À quel moment, vous pourriez courir
traceback()
pour voir la pile d'appels. Voici 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 cadres marqués 4:
et supérieurs. Nous voyons cela foo
appelé bar
et cela a bar
généré l'avertissement. Cela devrait vous montrer quelles fonctions appelaient glm.fit
.
Si vous souhaitez maintenant déboguer cela, nous pouvons utiliser une autre option pour dire à R d'entrer dans le débogueur lorsqu'il rencontre une erreur, et comme nous avons fait des erreurs d'avertissement, nous obtiendrons un débogueur lorsque l'avertissement d'origine est déclenché. 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 entrer dans l'un de ces cadres pour voir ce qui se passait lorsque l'avertissement a été émis.
Pour réinitialiser les options ci-dessus à leur valeur par défaut, entrez
options(error = NULL, warn = 0)
En ce qui concerne l'avertissement spécifique que vous citez, il est fort probable que vous deviez autoriser plus d'itérations dans le code. Une fois que vous avez découvert ce qui appelle glm.fit
, essayez de lui transmettre l' control
argument en utilisant glm.control
- voir ?glm.control
.