Data.table: [R- फोर्ज # 5222] 'नहीं पाया गया' जब DT [, सूची (योग (गैर-.SD-col), lapply (.SD, mean)), = =, .SDcols = ...] द्वारा।

को निर्मित 8 जून 2014  ·  12टिप्पणियाँ  ·  स्रोत: Rdatatable/data.table

द्वारा प्रस्तुत: मैट वेलर; सौंपा गया: कोई भी नहीं; आर-फोर्ज लिंक

.SDcols का उपयोग करते समय (कई कॉलमों में किसी फ़ंक्शन को लागू करने के उद्देश्य से) मैं निम्नलिखित तालिका का उपयोग करके मूल तालिका (v1) में अन्य स्तंभों का संदर्भ नहीं दे सकता:

dt = data.table(grp=c(2,3,3,1,1,2,3), v1=1:7, v2=7:1, v3=10:16)
dt.out = dt[, c(v1 = sum(v1),  lapply(.SD,mean)), by = grp, .SDcols = v2:v3]
# Error in `[.data.table`(dt, , list(v1 = sum(v1), lapply(.SD, mean)), by = grp,  : 
#   object 'v1' not found

एक समान त्रुटि तब होती है जब मैं सूची के बजाय c का उपयोग करता हूं, स्पष्ट रूप से कॉलम v1 को j क्लॉज के भीतर एक्सेस नहीं किया जा सकता है।

मैंने निम्न कोड का सहारा लिया, जिसमें कॉलम v1 शामिल है, भले ही मैं नहीं चाहता कि इसे lapply हिस्से में शामिल किया जाए, परिकलन के बाद इसे गिराना होगा।

sd.cols = c("v1","v2", "v3")
dt.out = dt[, c(sum.v1 = sum(v1), lapply(.SD,mean)), by = grp, .SDcols = sd.cols]

Stackoverflow पर eddi के अनुसार यह एक बग है और उसने मुझे इसकी रिपोर्ट करने के लिए कहा है। मैं बहुत अधिक विवरण प्रदान नहीं कर सकता क्योंकि मुझे बिल्कुल यकीन नहीं है कि कौन सा हिस्सा उसे लगता है कि बग था, अरुण द्वारा स्वीकार किए गए उत्तर को देखते हुए और उनकी आगामी चर्चा पर प्रकाश डाला जाएगा जहां समस्या है।

यहाँ प्रासंगिक एसओ पद है।

High bug

सभी 12 टिप्पणियाँ

अपडेट करने के लिए एक और पोस्ट: http://stackoverflow.com/questions/27755518/data-table-sd-lapply-multiple-columns-in-argument

थोड़ा देर से, लेकिन इस सवाल को ढेर में जोड़ रहा हूं

मैंने इसे बग के रूप में भी नहीं सोचा था, आमतौर पर मैं .SDcols को अतिरिक्त आवश्यक फ़ील्ड प्रदान करता हूं और बाद में j मैं अवांछित कॉलम को बाहर करने के लिए .SD[, !"total", with=FALSE] का उपयोग करता हूं।

यह एक और अच्छा उपाय है, मुझे आश्चर्य है कि dt$total का उपयोग करते हुए प्रदर्शन में अंतर दिखाई देता है। और हां, इस तरह का FR और बग, IMO के बीच की रेखा को नृत्य करता है।

इसे फिर से उछालना। ऐसा लगता है कि यह एक बहुत महत्वपूर्ण सुधार हो सकता है। इस प्रश्न से संबंधित प्रतीत होता है और संभवतः DT[, (deltaColsNewNames) := lapply(.SD, normalDelta, price), .SDcols = deltaColsNames] माध्यम से हल किया जा सकता है

यहां एक और सरल मामला है जहां यह उपयोगी होगा: http://stackoverflow.com/a/32498711/1191259

यहाँ एक और सरल मामला है जो ग्रस्त है: http://stackoverflow.com/questions/32944060/use-data-table-to-calculate-new-columns/32944519#32944519

तय होने पर अपडेट करने के लिए एक और: http://stackoverflow.com/q/32915770/1191259

वाह! अब हम यह कर सकते हैं:

require(data.table)
dt = data.table(grp=c(2,3,3,1,1,2,3), v1=1:7, v2=7:1, v3=10:16)
dt.out = dt[, c(v1 = sum(v1),  lapply(.SD,mean)), by = grp, .SDcols = v2:v3]
  #  grp v1  v2   v3
# 1:   2  7 4.5 12.5
# 2:   3 12 4.0 13.0
# 3:   1  9 3.5 13.5

यहां से जुड़े सभी SO पोस्ट अपडेट किए गए। सभी को धन्यवाद।

धन्यवाद, @arunsrinivasan मैं कुछ साल से इस फिक्स का इंतजार कर रहा था।

बहुत बढ़िया! धन्यवाद

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स