ঠিক আছে, আবার উদ্ধারের সময়। এটি 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
জোশুয়ার মন্তব্যটিকে মাথায় রেখে আপডেট করুন, আমি বেঞ্চমার্কের অন্যান্য উপায় চেষ্টা করেছি। মাইক্রোব্যাঙ্কমার্কটি সবচেয়ে ভাল বলে মনে হচ্ছে। ... এবং এটি একই সময় দেখায়:
> 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