/ / एक समग्र समारोह के साथ sapply की गति तुलना - आर, प्रदर्शन, रनटाइम

एक समग्र समारोह - आर, प्रदर्शन, रनटाइम के साथ sapply की गति तुलना

> system.time(sapply(rnorm(1000000,0,1), function (x) round(x,2)))
user  system elapsed
2.78    0.11    2.89
> system.time(round(rnorm(1000000,0,1),2))
user  system elapsed
0.29    0.00    0.30

मैं जवाब पढ़ने के बाद यह कोशिश कर रहा थाआर युक्तियाँ सवाल करने के लिए। मुझे उम्मीद नहीं थी कि उपरोक्त मामले में समकक्ष समग्र कार्य की तुलना में तेजी से परिमाण का क्रम हो। क्या किसी को पता है कि यह मामला क्यों है? अगर मैं सही ढंग से समझता हूं तो वेक्टरिज़ होगा और बेहतर तेज़ी से निकट होगा।

उत्तर:

जवाब के लिए 2 № 1

यहां कुछ भी नहीं है - आप इसे केवल एक वेक्टर देते हैं - वैक्टर की सूची नहीं, और परिणामस्वरूप परिणाम को एक (एकल कॉलम) मैट्रिक्स में परिवर्तित कर देता है।

आपके लिए परिणाम को सरल बना रहा है, लेकिन ऐसा करने में एक सरणी उत्पन्न करना है।

अगर आप इसे एक सूची देते हैं तो तुलना करें:

system.time(sapply(list(rnorm(1000000,0,1)), function (x) round(x,2)))
user  system elapsed
0.22    0.00    0.22

system.time(sapply(rnorm(1000000,0,1), function (x) round(x,2)))
user  system elapsed
4.21    0.00    4.21

जवाब के लिए 5 № 2

शायद sapply, जो लापरवाही का एक साधारण आवरण है, वेक्टर नहीं है। इस कोड को आजमाएं

system.time(sapply(rnorm(10), function (x) {print(length(x)); round(x,2)}))

और यहां कार्यान्वयन देखें: https://svn.r-project.org/R/trunk/src/main/apply.c