有没有办法将特定的省略号参数仅应用于某些函数,而不应用于其他函数?

Is there a way to apply specific ellipses arguments to only certain functions, and not others?

我有两个函数将省略号参数计算为列名。这些函数(sub_fun_1 和 sub_fun_2)使用这些列名称对输入的数据帧进行分组。

main_fun <- function(df1, df2, ...) {

columns <- enquos(...) ### '...' arguments used to specify columns in data-sets

df1_grouped <- sub_fun_1(df1, columns) ### Evaluates 'columns' and groups df1 by column names

df2_grouped <- sub_fun_2(df2, columns) ### Evaluates 'columns' and groups df2 by column names
}
sub_fun_1 <- function(df1, columns) {
df1_grouped <- df1 %>%
group_by(!!! columns)
}

sub_fun_2 <- function(df2, columns) {
df2_grouped <- df2 %>%
group_by(!!! columns)
}

但是,我不能对两个数据集使用相同的列名,因为那样会导致错误,两个数据集都需要按列分组他们独有的名字。

有没有一种方法可以指定哪些省略号参数对应于哪些 function/data-frame?或者可能使用两组独特的省略号参数?

我发现了一些类似的 questions/answers 页面,但我仍然对主题以及如何针对我的特定问题实施最佳解决方案感到困惑。

一种选择是在转换为字符后使用intersect

library(dplyr)
library(purrr)
main_fun <- function(data1, data2, ...) {

      columns <- map_chr(enquos(...), rlang::quo_name)
      sub_fun1 <- data1 %>% 
                    group_by_at(vars(intersect(names(.), columns))) 

      sub_fun2 <- data2 %>% 
                    group_by_at(vars(intersect(names(.), columns))) 

      list(sub_fun1, sub_fun2)




  }

main_fun(iris, mtcars, gear, vs, Species)
#[[1]]
# A tibble: 150 x 5
# Groups:   Species [3]
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
# 1          5.1         3.5          1.4         0.2 setosa 
# 2          4.9         3            1.4         0.2 setosa 
# 3          4.7         3.2          1.3         0.2 setosa 
# 4          4.6         3.1          1.5         0.2 setosa 
# 5          5           3.6          1.4         0.2 setosa 
# 6          5.4         3.9          1.7         0.4 setosa 
# 7          4.6         3.4          1.4         0.3 setosa 
# 8          5           3.4          1.5         0.2 setosa 
# 9          4.4         2.9          1.4         0.2 setosa 
#10          4.9         3.1          1.5         0.1 setosa 
# … with 140 more rows

#[[2]]
# A tibble: 32 x 11
# Groups:   vs, gear [6]
#     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
# 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
# 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
# 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
# 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
# 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
# 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
# 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
# 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
#10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows