2015-09-28 10 views
8

Ich versuche, ein Modell mit dem glmnet Paket zu lösen, zu bauen, aber ich erhalte die folgende Fehlermeldung, wenn ich die folgende Zeile aus:Wie ‚Schutz Stapelüberlauf‘ Ausgabe in R Studio

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

Error: protect(): protection stack overflow 

Ich weiß, dass dies auf meine große Anzahl von Variablen (26k +) im Datenrahmen zurückzuführen ist. Wenn ich weniger Variablen verwende, wird der Fehler nicht angezeigt. Ich weiß, wie man das in der Befehlszeile R löst, aber ich muss in R Studio bleiben, also möchte ich es aus R Studio reparieren. Also, wie mache ich das?

+1

Was ist Ihr Problem, wenn Sie 'Befehlszeile R' verwenden? – Dason

+0

Starten Sie R mit dem folgenden Argument: R --max-ppsize 500000 – Ansjovis86

+0

Ihre eigentliche Frage ist, wie Sie eine Befehlszeilenoption in RStudio festlegen? – Roland

Antwort

1

@ Ansjovis86

können Sie geben die ppsize als Befehlszeilenargument

rstudio.exe --max-ppsize=5000000 

Sie können Rstudio auch mit der Expression Option über Ihre .Rprofile oder zur Laufzeit zu setzen, indem die options(expressions = 5e5) Befehl.

> options(expressions = 5e5) 
>?options 

...

Ausdrücke:

gibt eine Obergrenze für die Anzahl der verschachtelten Ausdrücken, die ausgewertet werden sollen. Gültige Werte sind 25 ... 500000 mit Standard 5000. Wenn Sie es erhöhen, möchten Sie vielleicht auch R mit einem größeren Schutzstapel starten; siehe --max-ppsize im Speicher. Beachten Sie auch, dass ein Überlauf des C-Stacks zu einem segfault führen kann, und in Betriebssystemen, in denen dies möglich ist, möchten Sie dies möglicherweise erhöhen. Sobald das Limit erreicht ist, wird ein Fehler ausgelöst. Die aktuelle Nummer, die sich in der Auswertung befindet, finden Sie unter Cstack_info.

Cstack_info() - to determine current setting.s 
0

Die Ursache ist die model.matrix Funktion, die 1) eine Menge Speicher verwenden wird; und 2) diesen Fehler für eine ausreichend große Nr. werfen. von Spalten.

Verwenden Sie mein GlmnetUtils-Paket, das beide Probleme umgehen wird. Anstatt die Modellmatrix auf einmal zu erstellen, macht sie das Wort für Wort; und es versucht auch nicht, große Formeln zu bewerten. Dies ist ein Los schneller, und riskiert nicht den Stapel zu sprengen.

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