2015-09-28 188 views
8

Sto cercando di costruire un modello con il pacchetto glmnet, ma sto ottenendo il seguente errore quando si esegue la seguente riga:Come risolvere 'la protezione dello stack overflow' problema in R Studio

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

Error: protect(): protection stack overflow 

So che questo è dovuto al mio grande numero di variabili (26k +) nel dataframe. Quando uso un numero inferiore di variabili, l'errore non viene visualizzato. So come risolvere questo in linea di comando R, ma ho bisogno di rimanere in R studio, quindi voglio ripararlo da R Studio. Quindi, come faccio?

+1

Qual è la tua correzione quando si utilizza la 'riga di comando R'? – Dason

+0

Avvia R con il seguente argomento: R --max-ppsize 500000 – Ansjovis86

+0

Quindi, la tua domanda reale è come impostare un'opzione della riga di comando in RStudio? – Roland

risposta

1

@ Ansjovis86

È possibile specificare il ppsize come argomento della riga di comando per Rstudio

rstudio.exe --max-ppsize=5000000 

Si può anche impostare l'opzione espressione tramite il vostro .Rprofile o in fase di esecuzione utilizzando il comando options(expressions = 5e5).

> options(expressions = 5e5) 
>?options 

...

espressioni:

imposta un limite al numero di espressioni nidificate che saranno valutati. I valori validi sono 25 ... 500000 con 5000 di default. Se lo si aumenta, si può anche voler avviare R con uno stack di protezione più grande; vedi --max-ppsize in memoria. Nota anche che potresti causare un segfault dall'overflow dello stack C e nei sistemi operativi in ​​cui è possibile che tu voglia aumentarlo. Una volta raggiunto il limite, viene generato un errore. L'attuale numero in valutazione può essere trovato chiamando Cstack_info.

Cstack_info() - to determine current setting.s 
0

La causa principale è la funzione model.matrix, che 1) utilizzare molta memoria; e 2) lanciare questo errore per un numero n. di colonne.

Provare a utilizzare il mio pacchetto glmnetUtils, che risolverà entrambi questi problemi. Piuttosto che costruire la matrice del modello in un colpo solo, lo fa a termini di termine; e inoltre non tenta di valutare formule enormi. Questo è un lotto più veloce e non rischia di far esplodere lo stack.

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