पर कॉलम नाम पास करने के लिए मैं एक ऐसा फ़ंक्शन लिखने में सक्षम होना चाहता हूं जो समूहों द्वारा data.table
में प्रतिगमन चलाता है और फिर परिणामों को अच्छी तरह से व्यवस्थित करता है।डेटाटेबल प्रोग्रामेटिक रूप से
require(data.table)
dtb = data.table(y=1:10, x=10:1, z=sample(1:10), weights=1:10, thedate=1:2)
models = c("y ~ x", "y ~ z")
res = lapply(models, function(f) {dtb[,as.list(coef(lm(f, weights=weights, data=.SD))),by=thedate]})
#do more stuff with res
मैं के बाद से #doe more stuff
लंबे हो सकता है एक समारोह में यह सब रैप करने के लिए करना चाहते हैं: यहाँ मैं करना चाहते हैं क्या का एक नमूना है। मुझे जिस मुद्दे का सामना करना पड़ता है वह है कि data.table
पर चीजों के विभिन्न नामों को कैसे पास किया जाए? उदाहरण के लिए, मैं कॉलम नाम weights
कैसे पास करूं? मैं thedate
कैसे पास करूं? मैं एक प्रोटोटाइप है कि इस तरह दिखता है कल्पना:
myfun = function(dtb, models, weights, dates)
मुझे स्पष्ट हो: मेरे कार्य करने के लिए फार्मूले गुजर समस्या नहीं है। यदि weights
मैं उपयोग करना चाहता था और तारीख का वर्णन स्तंभ नाम, thedate
में जाने जाते थे तो मेरे समारोह बस ऐसा दिखाई दे सकता:
myfun = function(dtb, models) {
res = lapply(models, function(f) {dtb[,as.list(coef(lm(f, weights=weights, data=.SD))),by=thedate]})
#do more stuff with res
}
हालांकि स्तंभ thedate
करने और weights
करने के लिए इसी नाम पहले से अनजान हैं। मैं उन्हें इतनी के रूप में मेरे कार्य करने के लिए पारित करने के लिए करना चाहते हैं:
#this will not work
myfun = function(dtb, models, w, d) {
res = lapply(models, function(f) {dtb[,as.list(coef(lm(f, weights=w, data=.SD))),by=d]})
#do more stuff with res
}
धन्यवाद
दिलचस्प। धन्यवाद! – Alex
+1 शायद '.BY'' match.call() 'लाइन से बचने के लिए यहां उपयोगी है, सुनिश्चित नहीं है। –