r - 通过R中的过滤器识别函数输入?
问题描述
在我foo()
下面的调用中,有没有办法在函数内部识别filter_var =
(ie, ) 的输入?test
目前,无法识别输入。
library(tidyverse)
library(rlang)
foo <- function(..., filter_var = NULL){
filter_var <- rlang::ensyms(filter_var)
dat <- expand_grid(...)
dat %>%
filter(
{{filter_var}} != "A" ## HERE `filter_var` is not recognized.
)
}
foo(study = 1:2, test = LETTERS[1:2], filter_var = test)
# study test
# <int> <chr>
#1 1 A
#2 1 B
#3 2 A
#4 2 B
解决方案
你不能结合ensym
和{{}}
。{{}}
不带显式使用ensym
foo <- function(..., filter_var = NULL){
dat <- expand_grid(...)
dat %>%
filter({{filter_var}} != "A")
}
foo(study = 1:2, test = LETTERS[1:2], filter_var = test)
或使用!!
(ensym
请注意,您只解码一个符号,所以使用ensym
而不是ensyms
)。
foo <- function(..., filter_var = NULL){
filter_var <- rlang::ensym(filter_var)
dat <- expand_grid(...)
dat %>%
filter(!!filter_var != "A")
}
推荐阅读
- php - 使用 pdo 更新图像时文件夹名称成为数据库中的值
- javascript - 一次从多个选择字段中获取所选选项的值
- postgresql - 由 liquibase maven 插件为 postgres 生成的数据库更改日志的插入查询中区分大小写的列名
- google-maps - 地点未显示在 Google Places API 上
- arrays - 在单独的行中显示嵌套的 JSON 数据 - Angular4
- javascript - 执行在 ajax 响应中返回的 js 文件
- qt - GridLayout - ColumnLayout 内的项目居中
- mysql - Mysql 行锁定 - 性能问题
- node.js - Node.JS - 观察和获取对文件的更改
- azure - 加入 Office365 Outlook OAuth 时出现 invalid_grant 错误