2015-09-28 1 views
8

Je suis en train de construire un modèle avec le paquet glmnet, mais je reçois l'erreur suivante lorsque je lance la ligne suivante:Comment résoudre la question « de débordement de la pile de protection » dans R studio

#library('glmnet') 
x = model.matrix(response ~ ., data = acgh_frame[,c(3:ncol(acgh_frame))]) 

Error: protect(): protection stack overflow 

Je sais que cela est dû à mon grand nombre de variables (26k +) dans la base de données. Lorsque j'utilise moins de variables, l'erreur n'apparaît pas. Je sais comment résoudre ceci dans la ligne de commande R, mais j'ai besoin de rester dans le studio R, donc je veux le réparer à partir de R Studio. Alors, comment je fais ça?

+1

Quelle est votre solution lorsque vous utilisez la ligne de commande R? – Dason

+0

Démarrer R avec l'argument suivant: R --max-ppsize 500000 – Ansjovis86

+0

Donc, votre vraie question est de savoir comment définir une option de ligne de commande dans RStudio? – Roland

Répondre

1

@ Ansjovis86

Vous pouvez spécifier le ppsize comme argument de ligne de commande pour rstudio

rstudio.exe --max-ppsize=5000000 

Vous pouvez également définir l'option d'expression via votre .Rprofile ou lors de l'exécution en utilisant la commande options(expressions = 5e5).

> options(expressions = 5e5) 
>?options 

...

expressions:

fixe une limite sur le nombre d'expressions imbriquées qui seront évaluées. Les valeurs valides sont 25 ... 500000 avec 5000 par défaut. Si vous l'augmentez, vous pouvez également démarrer R avec une pile de protection plus grande; voir --max-ppsize en mémoire. Notez également que vous pouvez provoquer une erreur de segmentation du débordement de la pile C, et sur les systèmes d'exploitation où cela est possible, vous pouvez vouloir augmenter cela. Une fois la limite atteinte, une erreur est générée. Le numéro actuel en cours d'évaluation peut être trouvé en appelant le Cstack_info.

Cstack_info() - to determine current setting.s 
0

La cause profonde est la fonction model.matrix, qui 1) utiliser une grande quantité de mémoire; et 2) jeter cette erreur pour un non suffisamment grand. des colonnes. Essayez d'utiliser mon paquetage glmnetUtils, qui contournera ces deux problèmes. Plutôt que de construire la matrice du modèle en une fois, elle le fait par terme; et il n'essaie pas non plus d'évaluer des formules énormes. Ceci est un lot plus rapide, et ne risque pas de faire exploser la pile.

install.packages("glmnetUtils") 
library(glmnetUtils) 
glmnet(response ~ ., data = acgh_frame[3:ncol(acgh_frame)])