首页 > 解决方案 > 在R中编写一个可以忽略特定过滤器参数的函数

问题描述

我想写一个有几个输入的函数。
每个输入都会调整 dplyr 管道中的特定过滤器参数。

我正在为如何打开/关闭 grep 参数而苦苦挣扎,
也就是说,我希望能够完全忽略 grep 行

我的数据框(df)具有三个变量(发送、重复、案例)

这是我的功能:

my_filter <- function(df, a, b, c){ 

df <<- df %>%
          filter(sent != a,
                repeat != b,
                 !grepl("_v", cases)) 
}

我希望“c”参数允许我忽略管道中的最后一行!grepl(“_v”,cases)
如何设置“c”以控制该行的存在/不存在?

标签: rfunctiondplyr

解决方案


我建议这样的事情:

my_filter = function(df, a, b, c = TRUE) {
    result = df %>% filter(
      sent != a,
      repeat_col != b
    )
    if(c) result = result %>% filter(!grepl("_v", cases, fixed = TRUE))
    return(result)
}

这会按照您的要求处理条件。如果设置cFALSE,则不会应用最后一个条件。(在其他情况下,您还可以测试if(missing(c))以检查c参数是否由用户提供。)

我也不使用全局赋值,因为你基本上不应该使用它,return结果让用户选择结果名称,而不是为他们选择它并可能覆盖他们已经拥有的东西。

fixed = TRUE只是为了提高效率,因为您的模式是完全匹配的,而不是正则表达式。


推荐阅读