gpt4 book ai didi

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

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

我有两个函数将省略号参数计算为列名。这些函数(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)
}

但是,我不能对两个数据集使用相同的列名,因为这会导致错误,即两个数据集都需要按它们唯一的列名进行分组。

有没有办法可以指定哪些省略号参数对应于哪个函数/数据框?或者可能使用两组独特的省略号参数?

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

最佳答案

一种选择是使用 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

关于r - 有没有办法将特定的省略号参数仅应用于某些函数,而不是其他函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495675/

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