> 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