dplyr函数中的多个过滤器
我想做一个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"
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不起作用。好的,谢谢。我仍然好奇如何使这项工作。如果这种方法是错误的,我很想知道一种更好的灵活过滤函数的方法。