编写R函数时使用多个null参数的最佳实践

时间:2019-07-02 13:09:13

标签: r

我正在编写一个函数,该函数根据传递给它的变量对数据框进行子集化。我读了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 个答案:

答案 0 :(得分:1)

编辑:

在您的特定问题中,您可以分离出if个测试:

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

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

否则,正如您所指出的,排列的数量将迅速增加!