gpt4 book ai didi

r - 如何在函数内的 dplyr 过滤器中使用动态参数

转载 作者:行者123 更新时间:2023-12-04 00:29:16 26 4
gpt4 key购买 nike

我正在尝试添加在 dplyr 中使用动态数量的变量进行过滤的功能。我希望用户能够在函数调用中以简单的方式输入命令,即 ... - 下面的例子应该会有所帮助。用户应该能够分割出seg1 == 'b'seg2 == 'd'只需将它们输入函数 my_func(example_data, seg1 = 'b', seg2 = 'd')但所有的尝试都失败了。使用标准 SQL 很容易做到这一点,只是不熟悉 NSE 格式。

library('tidyverse')

example_data = tibble(seg1 = c('a','b','b','c'),
seg2 = c('d', 'd', 'd', 'e'),
out = c(1, 10, 20, 40))

my_func = function(dat, ...){
args = list(...)
arg_names = names(args)
### ????
dat = dat %>%
filter(???)
### ????
return(dat)
}

my_func(example_data, seg1 = 'b', seg2 = 'd')

# Desired output
> example_data %>% filter(seg1 == 'b', seg2 == 'd')
# A tibble: 2 x 3
seg1 seg2 out
<chr> <chr> <dbl>
1 b d 10
2 b d 20

最佳答案

不要让我解释这个,因为大部分 rlang 对我来说仍然是难以形容的迟钝。我通过随机尝试来解决这个问题。

my_func = function(dat, ...){
args <- rlang::enexprs(...)
dat %>%
filter(!!! args)
}

> my_func(example_data, seg1 == 'b', seg2 == 'd')
# A tibble: 2 x 3
seg1 seg2 out
<chr> <chr> <dbl>
1 b d 10
2 b d 20

注意 ==的使用,所以我们将表达式传递给 ... , 不是命名参数。

关于r - 如何在函数内的 dplyr 过滤器中使用动态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53639265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com