2015-09-28 5 views
8

मैं glmnet पैकेज के साथ एक मॉडल बनाने के लिए कोशिश कर रहा हूँ, लेकिन जब मैं निम्न पंक्ति को चलाने मैं निम्न त्रुटि हो रही है:आर स्टूडियो में हल करने के लिए कैसे 'सुरक्षा ढेर अतिप्रवाह' मुद्दा

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

Error: protect(): protection stack overflow 

मुझे पता है कि यह डेटाफ्रेम में मेरी बड़ी संख्या में चर (26k +) के कारण है। जब मैं कम चर का उपयोग करता हूं तो त्रुटि दिखाई नहीं देती है। मुझे पता है कि कमांड लाइन आर में इसे कैसे हल किया जाए, लेकिन मुझे आर स्टूडियो में रहने की आवश्यकता है, इसलिए मैं इसे आर स्टूडियो से ठीक करना चाहता हूं। तो, मैं यह कैसे कर सकता हूं?

+1

जब आप 'कमांड लाइन आर' का उपयोग करते हैं तो आपका क्या तय होता है? – Dason

+0

निम्न तर्क के साथ प्रारंभ करें: आर - मैक्स-पिप्सिज 500000 – Ansjovis86

+0

तो, आपका वास्तविक प्रश्न यह है कि RStudio में कमांड लाइन विकल्प कैसे सेट करें? – Roland

उत्तर

1

@ Ansjovis86

आप Rstudio करने के लिए एक कमांड लाइन तर्क के रूप में ppsize निर्दिष्ट कर सकते हैं

rstudio.exe --max-ppsize=5000000 

आप कर सकते हैं भी साथ options(expressions = 5e5) आदेश का उपयोग करके अपने .Rprofile के माध्यम से या रनटाइम पर अभिव्यक्ति विकल्प सेट करना।

> options(expressions = 5e5) 
>?options 

...

भाव:

नेस्टेड भाव है कि मूल्यांकन किया जाएगा की संख्या पर कोई सीमा निर्धारित करता है। वैध मान 25 ... 500000 डिफ़ॉल्ट 5000 के साथ हैं। यदि आप इसे बढ़ाते हैं, तो आप आर को एक बड़े सुरक्षा ढेर के साथ भी शुरू करना चाहते हैं; मेमोरी में - मैक्स-पिप्सिज देखें। ध्यान दें कि आप सी स्टैक के ओवरफ्लो से सेगफॉल्ट का कारण बन सकते हैं, और ओएस पर जहां यह संभव है आप इसे बढ़ाना चाहते हैं। एक बार सीमा तक पहुंचने के बाद एक त्रुटि फेंक दी जाती है। मूल्यांकन के तहत वर्तमान संख्या Cstack_info पर कॉल करके पाई जा सकती है।

Cstack_info() - to determine current setting.s 
0

मूल कारण model.matrix फ़ंक्शन है, जो 1) बहुत मेमोरी का उपयोग करेगा; और 2) इस त्रुटि को पर्याप्त रूप से बड़े नंबर के लिए फेंक दें। कॉलम का

मेरे glmnetUtils पैकेज का उपयोग करने का प्रयास करें, जो इन दोनों समस्याओं के आसपास हो जाएगा। मॉडल मैट्रिक्स को एक बार में बनाने के बजाय, यह शब्द के अनुसार कार्य करता है; और यह विशाल सूत्रों का मूल्यांकन करने की कोशिश भी नहीं करता है। यह बहुत तेज है, और स्टैक को उड़ाने का जोखिम नहीं उठाता है।

install.packages("glmnetUtils") 
library(glmnetUtils) 
glmnet(response ~ ., data = acgh_frame[3:ncol(acgh_frame)]) 
संबंधित मुद्दे