खैर, बचाव के लिए फिर से समय। ऐसा लगता है switchकि आम तौर पर ifबयानों की तुलना में तेज है । ताकि, और तथ्य यह है कि कोड छोटा है / एक switchबयान के पक्ष में है switch:
# Simplified to only measure the overhead of switch vs if
test1 <- function(type) {
switch(type,
mean = 1,
median = 2,
trimmed = 3)
}
test2 <- function(type) {
if (type == "mean") 1
else if (type == "median") 2
else if (type == "trimmed") 3
}
system.time( for(i in 1:1e6) test1('mean') ) # 0.89 secs
system.time( for(i in 1:1e6) test2('mean') ) # 1.13 secs
system.time( for(i in 1:1e6) test1('trimmed') ) # 0.89 secs
system.time( for(i in 1:1e6) test2('trimmed') ) # 2.28 secs
अपडेट यहोशू की टिप्पणी को ध्यान में रखते हुए, मैंने बेंचमार्क करने के अन्य तरीकों की कोशिश की। Microbenchmark सबसे अच्छा लगता है। ... और यह समान समय दिखाता है:
> library(microbenchmark)
> microbenchmark(test1('mean'), test2('mean'), times=1e6)
Unit: nanoseconds
expr min lq median uq max
1 test1("mean") 709 771 864 951 16122411
2 test2("mean") 1007 1073 1147 1223 8012202
> microbenchmark(test1('trimmed'), test2('trimmed'), times=1e6)
Unit: nanoseconds
expr min lq median uq max
1 test1("trimmed") 733 792 843 944 60440833
2 test2("trimmed") 2022 2133 2203 2309 60814430
अंतिम अद्यतन यहां दिखाया गया है कि बहुमुखी कैसे switchहै:
switch(type, case1=1, case2=, case3=2.5, 99)
इस नक्शे case2और case3करने के लिए 2.5और (बेनाम) करने के लिए डिफ़ॉल्ट 99। अधिक जानकारी के लिए, प्रयास करें?switch