【问题标题】:Optional filter parameter in a functionto either filter or not filter data函数中的可选过滤器参数过滤或不过滤数据
【发布时间】:2020-01-17 07:07:57
【问题描述】:

我正在尝试提出一个以过滤器为参数的函数。例如,以mtcars 数据集为例。假设我只想通过选择 mpg 大于 21 来过滤数据集。下面是我的代码

mtcars_func<-function(df,mpg_filter=NULL){
  filter<-df%>%transmute(filter_a=mpg>mpg_filter)
  df%>%filter(!!!unname(filter))
}
outcome<-mtcars_func(mtcars,21)

通过这样做,我确实得到了我想要的,即仅符合我的条件mpg >=21 的行。但是,如果我想选择不输入任何过滤器而只是让这个函数吐出未过滤的数据怎么办?我将如何修改此功能以实现该功能?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以让missing查看mpg_filter

    mtcars_func<-function(df,mpg_filter=NULL){
    
      if(missing(mpg_filter)) {
         df
         } else {
        df%>%
           filter(mpg > mpg_filter)
       }
       }
    mtcars_func(mtcars,21)
    mtcars_func(mtcars)
    

    【讨论】:

    • 谢谢!为我工作。
    【解决方案2】:

    使用默认值-Inf

    mtcars_func<-function(df, mpg_filter = -Inf) {
      filter(df, mpg > mpg_filter)
    }
    
    mtcars_func(mtcars,21)
    mtcars_func(mtcars)
    

    【讨论】:

    • 这很聪明!但似乎只适用于数字列,对吗?
    • 该函数已经被硬编码到 mpg_filter 所以一般性没有损失。如果 mpg 被替换为字符列,您可以使用 "" 作为默认值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多