编写一个可以忽略R中特定过滤器参数的函数

编写一个可以忽略R中特定过滤器参数的函数,r,function,dplyr,R,Function,Dplyr,我想编写一个包含多个输入的函数。 每个输入调整dplyr管道中的特定过滤器参数 我正在努力学习如何打开/关闭grep参数, 也就是说,我希望能够完全忽略grep行 我的数据帧(df)有三个变量(发送、重复、案例) 以下是我的功能: my_filter <- function(df, a, b, c){ df <<- df %>% filter(sent != a, repeat != b,

我想编写一个包含多个输入的函数。
每个输入调整dplyr管道中的特定过滤器参数

我正在努力学习如何打开/关闭grep参数,
也就是说,我希望能够完全忽略grep行

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

以下是我的功能:

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

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

my_filter我建议如下:

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)
}
这将按照您的要求处理条件。如果将
c
设置为
FALSE
,则不会应用最后一个条件。(在其他情况下,还可以测试
if(缺少(c))
以检查
c
参数是否由用户提供。)

我也不使用全局赋值,因为您基本上不应该使用它,
return
ing结果允许用户选择结果名称,而不是为他们选择结果名称,并可能覆盖他们已经拥有的内容


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

我建议这样做:

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)
}
这将按照您的要求处理条件。如果将
c
设置为
FALSE
,则不会应用最后一个条件。(在其他情况下,还可以测试
if(缺少(c))
以检查
c
参数是否由用户提供。)

我也不使用全局赋值,因为您基本上不应该使用它,
return
ing结果允许用户选择结果名称,而不是为他们选择结果名称,并可能覆盖他们已经拥有的内容


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

这里有另一个选项:

库(dplyr)
我的_过滤器%
过滤器(萼片宽度!=a,
萼片长度!=b,
c |!grepl(“v”,物种))
}
dim(虹膜%>%my_过滤器)
#> [1] 150   5
dim(虹膜%>%my_过滤器(c=假))
#> [1] 50  5

这里是另一个选项:

库(dplyr)
我的_过滤器%
过滤器(萼片宽度!=a,
萼片长度!=b,
c |!grepl(“v”,物种))
}
dim(虹膜%>%my_过滤器)
#> [1] 150   5
dim(虹膜%>%my_过滤器(c=假))
#> [1] 50  5

不要试图在单个
过滤器()中执行此操作。
。相反,请将单个
filter()
命令包装在
if()
中,不要尝试在单个
filter()中执行此操作。相反,将单个的
filter()
命令包装在
if()