Идиома R для switch/case

У меня есть код R, который выглядит примерно так:

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...
}

Пример ввода и вывода:

print(compute.quantiles(2:4, c('c','d','e')))
[1]   2.643840 292.777208   3.823776

Это работает правильно, но немного некрасиво из-за глубокой вложенности, поэтому мне интересно, есть ли другая идиома, которая работает лучше. У кого-нибудь есть предложение? Если бы switch()принимала вектор в качестве первого аргумента, это работало бы прекрасно, но она принимает только скаляр.

19
задан Ken Williams 7 May 2012 в 19:07
поделиться