Em algum momento, glm.fit
está sendo chamado. Isso significa que uma das funções que você chama ou uma das funções chamadas por essas funções está usando glm
, glm.fit
.
Além disso, como mencionei no meu comentário acima, isso é um aviso, não um erro , o que faz uma grande diferença. Você não pode acionar nenhuma das ferramentas de depuração de R a partir de um aviso (com opções padrão antes que alguém me diga que estou errado ;-).
Se alterarmos as opções para transformar avisos em erros, poderemos começar a usar as ferramentas de depuração de R. De ?options
nós temos:
‘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.
Então, se você correr
options(warn = 2)
Em seguida, execute seu código, R lançará um erro. Nesse ponto, você pode executar
traceback()
para ver a pilha de chamadas. Aqui está um exemplo.
> 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)
Aqui você pode ignorar os quadros marcados 4:
e mais altos. Vemos isso foo
chamado bar
e que bar
gerou o aviso. Isso deve mostrar quais funções estavam chamando glm.fit
.
Se você deseja agora depurar isso, podemos mudar para outra opção para solicitar ao R que entre no depurador quando encontrar um erro e, como cometemos erros de aviso, obteremos um depurador quando o aviso original for acionado. Para isso, você deve executar:
options(error = recover)
Aqui está um exemplo:
> 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:
Você pode entrar em qualquer um desses quadros para ver o que estava acontecendo quando o aviso foi lançado.
Para redefinir as opções acima para o padrão, digite
options(error = NULL, warn = 0)
Quanto ao aviso específico que você cita, é altamente provável que você precise permitir mais iterações no código. Depois de descobrir o que está chamando glm.fit
, descubra como passar o control
argumento usando glm.control
- veja ?glm.control
.