Glmnetパッケージを使用してモデルを構築しようとしていますが、次の行を実行すると次のエラーが発生します。
#library('glmnet')
x = model.matrix(response ~ ., data = acgh_frame[,c(3:ncol(acgh_frame))])
Error: protect(): protection stack overflow
これは、データフレーム内の変数の数が多い(26k以上)ためです。使用する変数を少なくすると、エラーは表示されません。コマンドラインRでこれを解決する方法を知っていますが、Rスタジオにとどまる必要があるため、Rスタジオから修正したいと思います。だから、どうすればこれを行うことができますか?
@ Ansjovis86
Rstudioのコマンドライン引数としてppsizeを指定できます
_rstudio.exe --max-ppsize=5000000
_
_.Rprofile
_を介して、または実行時にoptions(expressions = 5e5)
コマンドを使用して、式オプションを設定することもできます。
_> options(expressions = 5e5)
>?options
_
.。
式:
評価されるネストされた式の数に制限を設定します。有効な値は25 ... 500000で、デフォルトは5000です。これを増やす場合は、より大きな保護スタックでRを開始することもできます。メモリ内の--max-ppsizeを参照してください。また、Cスタックのオーバーフローによってセグメンテーション違反が発生する可能性があることにも注意してください。可能性のあるOSでは、それを増やすことができます。制限に達すると、エラーがスローされます。現在評価中の番号は、_Cstack_info
_を呼び出すことで確認できます。
_Cstack_info() - to determine current setting.s
_
根本的な原因はmodel.matrix
関数。1)大量のメモリを使用します。 2)十分に大きい番号に対してこのエラーをスローします。列の。
私のglmnetUtilsパッケージを使用してみてください。これにより、これらの両方の問題を回避できます。モデル行列を一度に作成するのではなく、用語ごとに作成します。また、巨大な数式を評価しようとはしません。これはlot高速であり、スタックを爆破するリスクはありません。
install.packages("glmnetUtils")
library(glmnetUtils)
glmnet(response ~ ., data = acgh_frame[3:ncol(acgh_frame)])