在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>
答案 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