У якийсь момент 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
.