我在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