Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
dplyr函数中的多个过滤器_R_Function_Dplyr - Fatal编程技术网

dplyr函数中的多个过滤器

dplyr函数中的多个过滤器,r,function,dplyr,R,Function,Dplyr,我想做一个dplyr函数,它足够灵活,可以使用多个过滤器 我可以创建一个使用一个过滤器的函数: library(tidyverse) df <- data_frame(name = c("mike","tom","jerry"), age = c(7,8,9), hair_color = c("brown", "black", "brown"), town = c("NYC","NYC"

我想做一个dplyr函数,它足够灵活,可以使用多个过滤器

我可以创建一个使用一个过滤器的函数:

library(tidyverse)
df <- data_frame(name = c("mike","tom","jerry"), 
                 age = c(7,8,9),
                 hair_color = c("brown", "black", "brown"),
                 town = c("NYC","NYC","SF"))

filter_fun <- function(df = df, filter_var_1, filter_1) {
     filter_var_1 <- enquo(filter_var_1)

     df %>%
       filter(UQ(filter_var_1) == filter_1) 
}
test <- filter_fun(filter_var_1 = town, filter_1 = "NYC")
但这是行不通的。错误:
评估中出错(lhs、父级、父级):
承诺已在评估中:递归默认参数引用或早期问题?

一旦解决了这个问题,我也希望能够改变过滤器的标志。比如说,

filter_fun <- function(df = df, filters = ..., conditions = ...) {
   filters <- quos(filters)
   conditions <- quos(conditions)
   df %>%
     filter(!!!filters == !!!conditions) -> eff
   return(eff)
}

nanna <- filter_fun(filters = c(hair_color,town), 
                    conditions = c("brown", "NYC"))
filter_fun <- function(df = df, 
                       filters = ..., 
                       conditions = ..., 
                       signs = ...) {
  filters <- quos(filters)
  conditions <- quos(conditions)
  types <- quos(signs)
  df %>%
     filter(!!!filters !!!signs !!!conditions) -> eff
  return(eff)
}

nanna <- filter_fun(filters = c(hair_color,town,age), 
                    conditions = c("brown", "NYC", 8), 
                    signs = c("==", "==", "<"))

filter\u fun更“常用”的方法是像filter本身一样将表达式作为参数传递:
filter(hair==“brown”,town==“NYC”,age<8)
。你想把所有这些表达式分开有什么原因吗?我正在尝试编写一个非R用户或至少初学者都可以使用的代码。下一步是把它放在闪亮的应用程序中。这个问题是我所需要的最低要求,但是这个过滤器适合于更大的函数调用。我对答案很好奇:)Well Shining总是以字符串而不是符号的形式返回东西。您在这里描述的问题的解决方案对shiny不起作用。好的,谢谢。我仍然好奇如何使这项工作。如果这种方法是错误的,我很想知道一种更好的灵活过滤函数的方法。