En algún momento, glm.fit
se está llamando. Eso significa que una de las funciones que llamas o una de las funciones llamadas por esas funciones están usando o bien glm
, glm.fit
.
Además, como mencioné en mi comentario anterior, es una advertencia, no un error , lo que hace una gran diferencia. No puede activar ninguna de las herramientas de depuración de R desde una advertencia (con opciones predeterminadas antes de que alguien me diga que estoy equivocado ;-).
Si cambiamos las opciones para convertir las advertencias en errores, entonces podemos comenzar a usar las herramientas de depuración de R. De ?options
tenemos:
‘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.
Entonces si corres
options(warn = 2)
luego ejecute su código, R arrojará un error. En ese punto, podrías correr
traceback()
para ver la pila de llamadas. Aquí hay un ejemplo.
> 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)
Aquí puede ignorar los marcos marcados 4:
y superiores. Vemos que foo
llamó bar
y que bar
generó la advertencia. Eso debería mostrarte qué funciones estaban llamando glm.fit
.
Si ahora desea depurar esto, podemos recurrir a otra opción para decirle a R que ingrese al depurador cuando encuentre un error, y como hemos cometido errores de advertencia, obtendremos un depurador cuando se active la advertencia original. Para eso debes ejecutar:
options(error = recover)
Aquí hay un ejemplo:
> 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:
Luego puede ingresar a cualquiera de esos marcos para ver qué estaba sucediendo cuando se lanzó la advertencia.
Para restablecer las opciones anteriores a sus valores predeterminados, ingrese
options(error = NULL, warn = 0)
En cuanto a la advertencia específica que cita, es muy probable que necesite permitir más iteraciones en el código. Una vez que hayas descubierto lo que está llamando glm.fit
, averigua cómo pasar el control
argumento usando glm.control
- mira ?glm.control
.