दिलचस्प पोस्ट
क्या आप exit_status_ready को जांचना है अगर आप recv_ready () की जांच करने जा रहे हैं? डेल्फी में एकाधिक कीबोर्ड को कैसे अलग करना है? अनुक्रमिक प्राथमिक कुंजी के साथ प्रश्न डालें _UIApplicationHandleEventFromQueueEvent में अनपेक्षित शून्य विंडो ड्राइंग वर्ग को घुमावदार लाइनों के बजाय सीधी रेखाओं को चित्रित करना गैर-मानक स्थानों में विचार प्राप्त करने के लिए मैं कस्टम रीज़र वीवीज़इंजिन कैसे लागू करूं? प्रदर्शन के लिए नुकीले शुद्ध कार्य, कैशिंग OwinStartup फायरिंग नहीं है एसक्यूएल अल्केमी फिल्टर में स्ट्रिंग चर में डायनामिक रूप से स्तंभ नाम कैसे देना है? PHP स्ट्रिंग से html टैग को निकाल रहा है पायथन सूची में आइटम के जोड़े के माध्यम से दोहराएं मैटलैब में एक भूखंड के डेटा को कैसे अपडेट करूँ? विजुअल स्टूडियो 2010 "पीडीबी फ़ाइल नहीं ढूँढा जा सकता है या नहीं" AVAssetReader के माध्यम से ऑडियो नमूने पढ़ना बहिष्कृत-आकार के लिए विस्थापन के लिए प्रतिस्थापन: विवश करने के लिए: रेखारेखामोड: आईओएस 7 में?

समूह डेटा के अंदर एलएम के अपडेट का उपयोग क्यों करना है, इसके मॉडल डेटा को खोना?

ठीक है, ये अजीब है मुझे संदेह है यह data.table अंदर एक बग है, लेकिन यह उपयोगी होगा यदि कोई ये समझा सकता है कि यह क्यों हो रहा है – क्या ठीक से update कर रहा है?

मैं list(list()) का प्रयोग कर रहा हूं। जब आप विभिन्न समूहों के लिए प्रत्येक lm ऑब्जेक्ट का अनुक्रम बनाते हैं, और फिर उन मॉडलों को update करते हैं, तो सभी मॉडलों का मॉडल डेटा अंतिम समूह की हो जाता है। यह ऐसा लगता है जैसे कोई संदर्भ कहीं न कहीं घूम रहा हो, जहां एक प्रतिलिपि बनायी जानी चाहिए, लेकिन मैं नहीं कह सकता कि मैं lm बाहर और update कर सकता हूं।

ठोस उदाहरण:

आईरिस डेटा से शुरू करते हुए, पहले तीन प्रजातियों को विभिन्न नमूना आकार बनाते हैं, फिर प्रत्येक प्रजाति के लिए एक lm मॉडल फिट होते हैं, उन मॉडलों को अपडेट करते हैं:

 set.seed(3) DT = data.table(iris) DT = DT[rnorm(150) < 0.9] fit = DT[, list(list(lm(Sepal.Length ~ Sepal.Width + Petal.Length))), by = Species] fit2 = fit[, list(list(update(V1[[1]], ~.-Sepal.Length))), by = Species] 

मूल डेटा सारणी में प्रत्येक प्रजाति के विभिन्न संख्याएं होती हैं

 DT[,.N, by = Species] # Species N # 1: setosa 41 # 2: versicolor 39 # 3: virginica 42 

और पहले फिट thsi की पुष्टि करता है:

 fit[, nobs(V1[[1]]), by = Species] # Species V1 # 1: setosa 41 # 2: versicolor 39 # 3: virginica 42 

लेकिन अद्यतित दूसरी फिट सभी मॉडलों के लिए 42 दिखा रहा है

 fit2[, nobs(V1[[1]]), by = Species] # Species V1 # 1: setosa 42 # 2: versicolor 42 # 3: virginica 42 

हम मॉडल विशेषता को भी देख सकते हैं जिसमें फिटिंग के लिए उपयोग किए गए डेटा शामिल हैं, और देखें कि सभी मॉडल वास्तव में अंतिम समूह डेटा का उपयोग कर रहे हैं सवाल यह हुआ कि यह कैसे हुआ है?

 head(fit$V1[[1]]$model) # Sepal.Length Sepal.Width Petal.Length # 1 5.1 3.5 1.4 # 2 4.9 3.0 1.4 # 3 4.7 3.2 1.3 # 4 4.6 3.1 1.5 # 5 5.0 3.6 1.4 # 6 5.4 3.9 1.7 head(fit$V1[[3]]$model) # Sepal.Length Sepal.Width Petal.Length # 1 6.3 3.3 6.0 # 2 5.8 2.7 5.1 # 3 6.3 2.9 5.6 # 4 7.6 3.0 6.6 # 5 4.9 2.5 4.5 # 6 7.3 2.9 6.3 head(fit2$V1[[1]]$model) # Sepal.Length Sepal.Width Petal.Length # 1 6.3 3.3 6.0 # 2 5.8 2.7 5.1 # 3 6.3 2.9 5.6 # 4 7.6 3.0 6.6 # 5 4.9 2.5 4.5 # 6 7.3 2.9 6.3 head(fit2$V1[[3]]$model) # Sepal.Length Sepal.Width Petal.Length # 1 6.3 3.3 6.0 # 2 5.8 2.7 5.1 # 3 6.3 2.9 5.6 # 4 7.6 3.0 6.6 # 5 4.9 2.5 4.5 # 6 7.3 2.9 6.3 

Solutions Collecting From Web of "समूह डेटा के अंदर एलएम के अपडेट का उपयोग क्यों करना है, इसके मॉडल डेटा को खोना?"

यह एक उत्तर नहीं है, लेकिन एक टिप्पणी के लिए बहुत लंबा है

.Environment लिए .Environment प्रत्येक परिणामस्वरूप मॉडल के लिए समान है

 e1 <- attr(fit[['V1']][[1]]$terms, '.Environment') e2 <- attr(fit[['V1']][[2]]$terms, '.Environment') e3 <- attr(fit[['V1']][[3]]$terms, '.Environment') identical(e1,e2) ## TRUE identical(e2, e3) ## TRUE 

ऐसा प्रतीत होता है कि data.table समूह द्वारा j (जो कि कुशल) के प्रत्येक मूल्यांकन के लिए स्मृति का एक ही बिट (मेरी गैर-तकनीकी शब्द) का उपयोग कर रहा है। हालांकि जब update को बुलाया जाता है, तो यह मॉडल का उपयोग करने के लिए इसका उपयोग कर रहा है। इसमें अंतिम समूह के मान शामिल होंगे I

इसलिए, यदि आप इसे झगड़ाते हैं, तो यह काम करेगा

 fit = DT[, { xx <-list2env(copy(.SD)) mymodel <-lm(Sepal.Length ~ Sepal.Width + Petal.Length) attr(mymodel$terms, '.Environment') <- xx list(list(mymodel))}, by= 'Species'] lfit2 <- fit[, list(list(update(V1[[1]], ~.-Sepal.Width))), by = Species] lfit2[,lapply(V1,nobs)] V1 V2 V3 1: 41 39 42 # using your exact diagnostic coding. lfit2[,nobs(V1[[1]]),by = Species] Species V1 1: setosa 41 2: versicolor 39 3: virginica 42 

एक दीर्घकालिक समाधान नहीं, लेकिन कम से कम एक वैकल्पिक हल