Tengo algo de código R que se ve básicamente como esto:R modismo para switch/case
compute.quantiles <- function(mu, type) {
## 'mu' and 'type' are vectors of the same length
var <- ifelse(type=='a', 6.3523 * mu^2,
ifelse(type=='b', 234.23 * mu,
ifelse(type=='c', {s <- 9.8 * ((mu-0.3)/3)^(6/7)+0.19; mu + mu^2/s},
ifelse(type=='d', 56.345 * mu^1.5,
ifelse(type=='e', 0.238986 * mu^2,
ifelse(type=='f', mu + 1.1868823 * mu^2,
NA))))))
# ...then do something with var...
}
Parte de la muestra de entrada & de salida:
print(compute.quantiles(2:4, c('c','d','e')))
[1] 2.643840 292.777208 3.823776
que funciona correctamente, pero es una especie de feo con la anidación profunda, así que me pregunto si hay un idioma diferente que funciona mejor. Alguien tiene una sugerencia? Si switch()
aceptara un vector como primer argumento, eso funcionaría muy bien, pero solo toma un escalar.
pudiste proporcionar un pequeño conjunto de datos reproducibles para probar esto? –
@TylerRinker hecho. –
Todas esas respuestas son inteligentes, pero no envían expresiones idiomáticas. Por lo tanto, la pregunta interesante sobre la forma idiomática de hacer esto en R permanece abierta. – Pere