2013-02-26 27 views
9

मुझे वेक्टर के सबसेट के माध्य और भिन्नता की गणना करने की आवश्यकता है। x वेक्टर बनें और y एक संकेतक बनें कि अवलोकन सबसेट में है या नहीं। कौन सा अधिक कुशल है:वैक्टर को सब्सट्रेट करने का सबसे प्रभावी तरीका

sub.mean <- mean(x[y]) 
sub.var <- var(x[y]) 

या

sub  <- x[y] 
sub.mean <- mean(sub) 
sub.var <- var(sub) 
sub  <- NULL 

पहले दृष्टिकोण एक नई वस्तु को स्पष्ट रूप से नहीं बनाता; लेकिन mean और var पर कॉल करने के लिए यह कॉल पूरी तरह से करें? या वे मूल वेक्टर पर संग्रहीत के रूप में काम करते हैं?

दूसरा तेज है क्योंकि इसे दो बार सबसेट करना नहीं है?

मैं बड़े डेटा सेट के लिए गति और स्मृति प्रबंधन के साथ चिंतित हूं।

+0

यदि आप वास्तव में बड़े डेटासेट के साथ काम करने के बारे में चिंतित हैं, तो आपको आर (या बहुत से नमूनाकरण) से दूर जाना होगा। उस तरफ, दो दृष्टिकोणों का बेंचमार्क क्यों नहीं? –

+7

@ जैकमेन: यह सिर्फ सच नहीं है (या रचनात्मक), खासकर जब से आप नहीं जानते कि उपयोगकर्ता के "बड़े" डेटासेट कितने बड़े हैं। –

+2

@ जैकमेन, 'एफएफ' और 'एफएफबेस' पैकेज (और अन्य "बड़े डेटा" पैकेज) के साथ, शुद्ध ओपन-सोर्स आर दक्षता और गति के साथ बहुत बड़े डेटासेट को संभालने में काफी सक्षम हो सकता है। क्रांति विश्लेषकों के लोगों से प्रमाण भी है कि आर को "बड़े डेटा" ग्लम काम के लिए बेहतर से अधिक एसएएस प्रदर्शन प्रदान करने के लिए बढ़ाया जा सकता है। आर जरूरी नहीं है कि एक बोतल-गर्दन हो, हालांकि आधार पैकेज * बड़े डेटासेट के नीचे गिर जाएंगे। – Dinre

उत्तर

7

बेंचमार्किंग लंबाई 10M का एक वेक्टर पर इंगित करता है कि (मेरी मशीन पर) बाद दृष्टिकोण तेजी से होता है:

f1 = function(x, y) { 
    sub.mean <- mean(x[y]) 
    sub.var <- var(x[y]) 
} 

f2 = function(x, y) { 
    sub  <- x[y] 
    sub.mean <- mean(sub) 
    sub.var <- var(sub) 
    sub  <- NULL 
} 

x = rnorm(10000000) 
y = rbinom(10000000, 1, .5) 

print(system.time(f1(x, y))) 
# user system elapsed 
# 0.403 0.037 0.440 
print(system.time(f2(x, y))) 
# user system elapsed 
# 0.233 0.002 0.235 

यह surprising- नहीं है mean(x[y])करताmean के लिए एक नई वस्तु बनाने के लिए है कार्य करने के लिए कार्य करें, भले ही यह इसे स्थानीय नामस्थान में नहीं जोड़ता है। इस प्रकार, f1 सबसेटिंग दो बार करने के लिए धीमा है (जैसा कि आपने अनुमान लगाया है)।

+0

माइक्रोबेंमार्क पैकेज इस प्रकार की तुलना के लिए बहुत बेहतर है: 'लाइब्रेरी (माइक्रोबेंमार्क); माइक्रोबेंमार्क (एफ 1 (एक्स, वाई), एफ 2 (एक्स, वाई)) ' – hadley

संबंधित मुद्दे