ある時点で、glm.fit
呼び出されています。つまり、呼び出す関数の1つ、またはそれらの関数によって呼び出される関数の1つが、、のいずれかを使用していることを意味し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