首页 > 解决方案 > 在 r 中创建一个带有布尔选项的函数:如果在调用函数时没有提供布尔选项,我如何返回数据帧?

问题描述

我得到了一个函数的以下代码:

data_function <- function(df,condtion_a,condition_b, condition_c= TRUE) {
  df <- df %>%
    filter(col_a == condtion_a & col_b == condition_b) 
    if(condition_c == TRUE) {
      df %>% filter(col_c== TRUE)
    } else if(condition_c== FALSE) { 
      df %>% filter(col_c == FALSE)
    }
    else {
  return(df)
    }
}

当我给TRUEFALSE给condition_c时,代码有效。但是,我想要一个选项,df <- df %>% filter(col_a == condtion_a & col_b == condition_b) 当 condition_c 不是TRUE或时只返回代码的一部分FALSE。例如,我想使用此功能以三种方式工作:

data_function(df,condtion_a,condition_b, condition_c= TRUE)

data_function(df,condtion_a,condition_b, condition_c= FALSE)

data_function(df,condtion_a,condition_b)

后者只返回调用函数时不存在的 df <- df %>% filter(col_a == condtion_a & col_b == condition_b)部分。condition_c我觉得这是一件非常简单的事情,但想不出如何解决这个问题。谢谢!

标签: r

解决方案


基于该函数,在应用条件return(df)之前返回数据集,if/else因为其输出未更新为“df”

data_function <- function(df,condtion_a,condition_b, condition_c) {
 # subset the rows of the dataset and update it to same object
  df <- df %>%
         filter(col_a == condtion_a & col_b == condition_b) 
 df1 <- if(missing(condition_c)) {
        df
    } else {
 # apply the `if/else if/else` and assign it to a new object or same object
      if(condition_c) {
         df %>%
             filter(col_c)
       } else if(!condition_c) { 
          df %>% 
             filter(!col_c)
     }else {
            df
           }
      }
   
    return(df1)
  }

推荐阅读