Saya sedikit bingung tentang pernyataan switch di R. Cukup googling fungsinya saya mendapatkan contoh sebagai berikut:
Penggunaan umum dari sakelar adalah untuk bercabang sesuai dengan nilai karakter dari salah satu argumen ke suatu fungsi.
> centre <- function(x, type) {
+ switch(type,
+ mean = mean(x),
+ median = median(x),
+ trimmed = mean(x, trim = .1))
+ }
> x <- rcauchy(10)
> centre(x, "mean")
[1] 0.8760325
> centre(x, "median")
[1] 0.5360891
> centre(x, "trimmed")
[1] 0.6086504
Namun ini sepertinya sama dengan hanya memiliki sekumpulan if
pernyataan yang ditujukan untuk masing-masingtype
Apakah hanya itu yang bisa dilakukan switch()
? Bisakah seseorang memberi saya contoh lebih lanjut dan aplikasi yang lebih baik?
r
switch-statement
LostLin
sumber
sumber
Jawaban:
Nah, waktu untuk menyelamatkannya lagi. Tampaknya
switch
secara umum lebih cepat daripadaif
pernyataan. Sehingga, dan fakta bahwa kodenya lebih pendek / rapi denganswitch
pernyataan bersandar padaswitch
:Perbarui Dengan mengingat komentar Joshua, saya mencoba cara lain untuk melakukan benchmark. Microbenchmark sepertinya yang terbaik. ... dan itu menunjukkan pengaturan waktu yang serupa:
Pembaruan Terakhir Berikut ini menunjukkan betapa serbaguna
switch
:Ini memetakan
case2
dancase3
ke2.5
dan (tanpa nama) default ke99
. Untuk informasi lebih lanjut, coba?switch
sumber
benchmark(test1('trimmed'), test2('trimmed'), replications=1e6)
.benchmark
fungsi apa yang Anda gunakan? Bukan yang jelas dari paket "patokan" sepertinya?microbencmark
, tetapi hasilnya sangat mirip dengan yang asli. Saya tidak benar-benar melihat bagaimana rbenchmark akan mengatasi masalah GC, tetapi tampaknya memiliki lebih banyak overhead dengan meneleponeval
danreplicate
.switch(type, c(this,that)=do something)
Singkatnya, ya . Tetapi ada kalanya Anda mungkin menyukai yang satu vs. yang lain. Google "case switch vs. if else". Ada beberapa diskusi sudah di SO juga. Juga, berikut adalah video bagus yang membahasnya dalam konteks MATLAB:
http://blogs.mathworks.com/pick/2008/01/02/matlab-basics-switch-case-vs-if-elseif/
Secara pribadi, ketika saya memiliki 3 case atau lebih, saya biasanya hanya menggunakan case / switch.
sumber