Как организовать функции Big R?

Я пишу функцию R, что становится довольно большой. Это признает множественный выбор, и я организую это так:

myfun <- function(y, type=c("aa", "bb", "cc", "dd" ... "zz")){

   if (type == "aa") {
      do something
      - a lot of code here -
      ....
   }

   if (type == "bb") {
      do something
      - a lot of code here -
      ....
   }

   ....
}

У меня есть два вопроса:

  1. Есть лучший способ, чтобы не использовать оператор «Если», для каждого выбора типа параметра?
  2. Может ли быть более функциональным написать подфункцию для каждого выбора «Тип»?

Если я пишу подфункцию, это будет выглядеть так:

myfun <- function(y, type=c("aa", "bb", "cc", "dd" ... "zz")){

   if (type == "aa") result <- sub_fun_aa(y)
   if (type == "bb") result <- sub_fun_bb(y)
   if (type == "cc") result <- sub_fun_cc(y)
   if (type == "dd") result <- sub_fun_dd(y)
   ....
}

Подфункция, конечно, определена в другом месте (в верхней части myfun или по-другому).

Я надеюсь, что я был понятен с моим вопросом. Заранее спасибо.

- Дополнительная информация -

Я пишу функцию, которая применяет некоторые различные фильтры на изображение (другой фильтр = другой параметр «тип»). Некоторые фильтры разделяют некоторый код (например, «AA» и «BB» - два гауссовских фильтра, которые отличаются только для одного строки кода), в то время как другие совершенно разные.

Итак, я вынужден использовать много ли, если заявление, то есть.

 if(type == "aa" | type == "bb"){
  - do something common to aa and bb -

    if(type == "aa"){
      - do something aa-related -
    }
    if(type == "bb"){
      - do something bb-related -
    }
 }

 if(type == "cc" | type == "dd"){
  - do something common to cc and dd -

    if(type == "cc"){
      - do something cc-related -
    }
    if(type == "dd"){
      - do something dd-related -
    }
 }

if(type == "zz"){
     - do something zz-related -
}

и так далее. Кроме того, есть некоторые, если заявление в коде «сделай что-то». Я ищу лучший способ организовать мой код.

9
задан Tommaso 31 August 2011 в 09:43
поделиться