首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用quosure在dplyr中将筛选器语句作为函数参数传递

如何使用quosure在dplyr中将筛选器语句作为函数参数传递
EN

Stack Overflow用户
提问于 2020-05-09 05:45:56
回答 1查看 933关注 0票数 1

使用dplyr包在R中,我想在函数中作为参数传递一个filter语句。我不知道如何将语句计算为代码而不是字符串。当我尝试下面的代码时,我会收到一条错误消息。我想我需要一个标准或什么,但我没有完全理解这个概念。

代码语言:javascript
复制
data("PlantGrowth")

myfunc <- function(df, filter_statement) {
  df %>%
    filter(!!filter_statement)
}

myfunc(PlantGrowth, "group %in% c('trt1', 'trt2')")

>  Error: Argument 2 filter condition does not evaluate to a logical vector 

# Want to do the same as this:
# PlantGrowth %>%
#   filter(group %in% c('trt1', 'trt2'))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-09 05:52:40

您可以使用来自parse_exprrlang

代码语言:javascript
复制
library(dplyr)

myfunc <- function(df, filter_statement) {
   df %>% filter(eval(rlang::parse_expr(filter_statement)))
}

identical(myfunc(PlantGrowth, "group %in% c('trt1', 'trt2')"), 
      PlantGrowth %>% filter(group %in% c('trt1', 'trt2')))

#[1] TRUE

使用infamousevalparse也可以做到这一点。

代码语言:javascript
复制
myfunc <- function(df, filter_statement) {
   df %>% filter(eval(parse(text = filter_statement)))
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61692367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档