Estoy un poco confundido acerca de la declaración de cambio en R. Simplemente buscando en Google la función obtengo un ejemplo de la siguiente manera:
Un uso común de switch es bifurcar según el valor de carácter de uno de los argumentos de una función.
> 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
Sin embargo, esto parece ser lo mismo que tener un montón de ifdeclaraciones designadas para cadatype
¿Eso es todo lo que hay que hacer switch()? ¿Alguien puede darme más ejemplos y mejores aplicaciones?
r
switch-statement
LostLin
fuente
fuente

Respuestas:
Bueno, el tiempo para el rescate de nuevo. Parece que
switches generalmente más rápido que lasifdeclaraciones. Entonces, y el hecho de que el código sea más corto / ordenado con unaswitchdeclaración se inclina a favor deswitch:Actualización Con el comentario de Joshua en mente, probé otras formas de comparar. El microbenchmark parece el mejor. ... y muestra tiempos similares:
Actualización final A continuación se muestra lo versátil que
switches:Esto mapea
case2ycase3a2.5y el valor por defecto (sin nombre) a99. Para obtener más información, intente?switchfuente
benchmark(test1('trimmed'), test2('trimmed'), replications=1e6).benchmarkfunción estás usando? ¿No parece el obvio del paquete "benchmark"?microbencmark, pero son muy similares a los originales. Realmente no veo cómo rbenchmark solucionaría el problema de GC, pero parece tener más gastos generales al llamarevalyreplicate.switch(type, c(this,that)=do something)En resumen, sí . Pero hay ocasiones en las que podrías favorecer a uno frente al otro. Google "cambio de caso frente a otro". También hay algunas discusiones sobre SO. Además, aquí hay un buen video que habla de ello en el contexto de MATLAB:
http://blogs.mathworks.com/pick/2008/01/02/matlab-basics-switch-case-vs-if-elseif/
Personalmente, cuando tengo 3 o más casos, suelo ir con caso / interruptor.
fuente