不能使用输入参数函数作为过滤器参数(R/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> 

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

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"使用不带引号的值,则转换为商,然后计算(!!(

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

注意:在OP的帖子中,"data"参数在FUNCTION内也不同

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

相关内容

  • 没有找到相关文章

最新更新