无法使用输入参数函数作为过滤器参数(R / dplyr)

时间:2018-06-09 15:52:22

标签: r function input dplyr

在R中编写函数时遇到了以下问题。我想在我的函数中使用我的一个列名(id)作为输入参数(X)来过滤我的数据集。

不幸的是,我的函数似乎不理解filter()中的X参数。有人有任何建议我怎么能让它发挥作用?

由于

数据

library(tidyverse)

df_data <- tibble(
  year = c(2004, 2005, 2006),
  id = c(1, 2, 3),
  value = c(10, 12, 1)
)

功能

FUNCTION <- function(data, X, Y){
    result <- df_data %>%
    filter(X == Y) %>%
    glimpse
}

输出

FUNCTION(data = df_data,X = "id", Y = 1)  

Observations: 0
Variables: 3
  $ year  <dbl> 
  $ id    <dbl> 
  $ value <dbl> 

1 个答案:

答案 0 :(得分:1)

如果“X”的预期输入参数是字符串,我们可以使用sym中的rlang

FUNCTION <- function(data, X, Y){
 data %>%
  filter((!! rlang::sym(X)) == Y) 
}

FUNCTION(data = df_data, X = "id", Y = 1)  
# A tibble: 1 x 3
#   year    id value
#  <dbl> <dbl> <dbl>
#1  2004     1    10

如果我们对'X'使用未加引号的值,请转换为quosure,然后评估(!!

FUNCTION <- function(data, X, Y){
 X <- enquo(X)
 data %>%
   filter((!! X) == Y)

   }

注意:在OP的帖子中,'{1}}

内的'data'参数也不同
FUNCTION