2012-03-05 7 views
6

में बुद्धिमान मैट्रिक्स आपरेशन हाल ही में मैं data.table पैकेज में भाग गया। मुझे अभी भी यकीन नहीं है कि पंक्ति-वार मैट्रिक्स संचालन कैसे करें। क्या मूल रूप से ऐसे परिचालनों को संभालने का इरादा था? उदाहरण के लिए, 0.tके बराबर डेटा.table क्या होगा?पंक्ति आर

fun उदाहरण mean, median, या mad के लिए, तर्क के रूप में एक सदिश लेना चाहिए।

उत्तर

4

मुझे लगता है कि आप := ऑपरेटर (?':=' देखें) की तलाश में हैं। एक छोटी उदाहरण और mapply समारोह के साथ तुलना से कम है (मुझे आशा है कि मैं mapply समारोह सही ढंग से लागू होते हैं; मैं केवल data.tables आजकल का उपयोग कर रहा है, ताकि इस पर कोई वादा है, लेकिन अभी भी, data.table तरह से तेजी से और में है मेरी राय को याद करने के लिए आसान):

library(data.table) 
> df <-  data.frame(ID = 1:1e6, 
+      B = rnorm(1e6), 
+      C = rnorm(1e6)) 
> system.time(x <- mapply(foo, df$B, df$C)) 
    user system elapsed 
    4.32 0.04 4.38 
> DT <- as.data.table(df) 
> system.time(DT[, D := foo(B, C)]) 
    user system elapsed 
    0.02 0.00 0.02 
> all.equal(x, DT[, D]) 
[1] TRUE 

मेरा उत्तर पोस्ट करने के बाद, मैं अब और नहीं तो यकीन नहीं है अगर यह है कि आप क्या देख रहे हैं। मुझे उम्मीद है कि यह करता है, अगर यह नहीं करता है तो अधिक जानकारी दें (उदाहरण के लिए, क्या आपके पास कई कॉलम हैं जिन्हें आप एक समारोह को लागू करना चाहते हैं, न केवल मेरे उदाहरण में दो?)। वैसे भी, यह SO post आपके लिए ब्याज का हो सकता है।

+0

tmp <- डीटी [, डी: = योग (बी, सी)]; tmp [1: 2,] सभी तत्वों पर कुल योग देता है। मतलब के साथ काम नहीं करता है। –

+0

http://stackoverflow.com/questions/7885147/efficient-row-wise-operations-on-a-data-table किसी भी फ़ंक्शन (माध्य) को सामान्यीकृत नहीं करता है। –

+0

@ danas.zuokas: अच्छे अंक। उन मामलों में मुझे लगता है कि आप केवल 'पंक्ति ...' फ़ंक्शंस का उपयोग करेंगे, उदा। 'पंक्तिसमूह (डीटी [, सूची (बी, सी)]), लेकिन मुझे लगता है कि प्रश्न को खुला छोड़ना सबसे अच्छा है। –