Лучшая практика использования нескольких нулевых аргументов при написании функции R - PullRequest
0 голосов
/ 02 июля 2019

Я пишу функцию, которая размещает подкадр данных на основе переданных ему переменных. Я прочитал в Advanced R, чтобы использовать функцию is_null для проверки нулевых аргументов. Я добавил 2 аргумента, которые уже являются if / elseif / elseif / else. Боюсь, если я добавлю еще много аргументов, читаемость кода сильно пострадает. Является ли мой метод лучшей практикой?

add_scores <- function(data,
                       study = NULL,
                       therapeutic_area = NULL ){

  if (is_null(study) & is_null(therapeutic_area)){

    temp <- data 

  } else if (!is_null(study) & is_null(therapeutic_area)){

    temp <- data %>% 
      filter(BC == study)

  } else if (is_null(study) & !is_null(therapeutic_area)) {

    temp <- data %>% 
      filter(PPDDIVISIONPRI == therapeutic_area)

  } else {

    temp <- data %>% 
      filter(
        BC == study & 
        PPDDIVISIONPRI == therapeutic_area)

  }

  return(

    temp %>% 
      mutate(ENROLLMENTRANK = dense_rank(desc(ENROLLMENTRATE)),
             CYCLETIMERANK = dense_rank(CYCLETIME)*2,
             TOTALRANK = dense_rank(ENROLLMENTRANK + CYCLETIMERANK)
             ) %>% 
      arrange(TOTALRANK, ENROLLMENTRANK, CYCLETIMERANK)
        )
}

1 Ответ

1 голос
/ 02 июля 2019

Отредактировано:

В вашей конкретной проблеме вы можете выделить if тесты:

if(!is.null(study)) data <- filter(data, BC==study)

if(!is.null(therapeutic_area)) data <- filter(data, PPDDIVISIONPRI==therapeutic_area)

В противном случае, как вы указываете, число перестановок будет быстро увеличиваться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...