В какой-то момент glm.fit
вызывается. Это означает , что одна из функций вы называете или одной из функций , вызываемых этими функциями используется либо glm
, glm.fit
.
Кроме того, как я упоминал в своем комментарии выше, это предупреждение, а не ошибка , что имеет большое значение. Вы не можете запустить какие-либо инструменты отладки R из предупреждения (с параметрами по умолчанию, прежде чем кто-то скажет мне, что я ошибаюсь ;-).
Если мы изменим параметры, чтобы превратить предупреждения в ошибки, мы можем начать использовать инструменты отладки R. От ?options
нас есть:
‘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.
Итак, если вы бежите
options(warn = 2)
затем запустите свой код, R выдаст ошибку. В этот момент вы можете запустить
traceback()
чтобы увидеть стек вызовов. Вот пример.
> 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)
Здесь можно игнорировать кадры, отмеченные 4:
и выше. Мы видим, что был foo
вызван bar
и bar
сгенерировано предупреждение. Это должно показать вам, какие функции вызывались glm.fit
.
Если теперь вы хотите отладить это, мы можем обратиться к другому варианту, чтобы сообщить R, чтобы он входил в отладчик при обнаружении ошибки, и, поскольку мы сделали предупреждения об ошибках, мы получим отладчик, когда сработает исходное предупреждение. Для этого вам следует запустить:
options(error = recover)
Вот пример:
> 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:
Затем вы можете перейти в любой из этих кадров, чтобы увидеть, что происходило, когда было выдано предупреждение.
Чтобы восстановить значения по умолчанию для указанных выше параметров, введите
options(error = NULL, warn = 0)
Что касается конкретного предупреждения, которое вы цитируете, весьма вероятно, что вам нужно разрешить больше итераций в коде. Как только вы узнали, что вызывает glm.fit
, подумайте, как передать ему control
аргумент, используя glm.control
- см ?glm.control
.