Mam trochę kodu R, który wygląda w zasadzie tak:R idiom dla przełącznika/przypadek
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...
}
Niektóre próbki wejściowe & wyjściowa:
print(compute.quantiles(2:4, c('c','d','e')))
[1] 2.643840 292.777208 3.823776
Że działa prawidłowo, ale jest to rodzaj brzydki z głębokim gniazdowaniem, więc zastanawiam się, czy istnieje inny idiom, który działa lepiej. Ktoś ma sugestię? Jeśli switch()
zaakceptował wektor jako pierwszy argument, to działałoby ładnie, ale wymaga skalaru.
mogłaś zapewnić mały odtwarzalny zestaw danych, aby to wypróbować? –
@ TylerRinker done. –
Wszystkie te odpowiedzi są sprytne, ale nie wysyłają idiomatycznego. Dlatego interesujące pytanie o idiomatyczny sposób robienia tego w R pozostaje otwarte. – Pere