使用带有 tidy-select 的符号列表
Using a list of symbols with tidy-select
在我们的数据聚合管道中,我们有一堆用于定义组的条件变量。为了提高代码的可读性和可维护性,我们使用一个预配置的符号列表,按照这个说明性片段进行整洁的评估:
# this is the list of our condition variables
condition_vars <- rlang::exprs(var1, var2, var3)
# split the data into groups
data %>% group_by(!!!condition_vars) %>% summarize(...)
这很好用,但我不知道在 <tidy-select>
上下文中使用它的优雅方式是什么,例如对于像 nest
这样的东西。问题是新 nest()
想要 nest(data = c(var1, var2, var3))
而不是 nest(var1, var2, var3)
,所以 nest(!!!condition_vars)
会给我一个警告。
我能想到的最好的是
df <- tibble(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1)
vars <- exprs(y, z)
nest(df, data = !!call2("c", !!!vars))
但肯定有更好的方法...
你可以nest(df, data = c(!!!vars))
.
但如今,如果表达式是简单的列名,我会将它们存储在字符向量中。您可以在选择上下文中提供带有 all_of()
的字符向量。在 mutate()
或 group_by()
等动作动词中,使用 across()
创建一个选择上下文,您可以在其中使用 all_of()
(以及其他功能,例如 starts_with()
)。
cols <- c("cyl", "am")
mtcars %>% group_by(across(all_of(cols))
mtcars %>% nest(data = all_of(cols))
在我们的数据聚合管道中,我们有一堆用于定义组的条件变量。为了提高代码的可读性和可维护性,我们使用一个预配置的符号列表,按照这个说明性片段进行整洁的评估:
# this is the list of our condition variables
condition_vars <- rlang::exprs(var1, var2, var3)
# split the data into groups
data %>% group_by(!!!condition_vars) %>% summarize(...)
这很好用,但我不知道在 <tidy-select>
上下文中使用它的优雅方式是什么,例如对于像 nest
这样的东西。问题是新 nest()
想要 nest(data = c(var1, var2, var3))
而不是 nest(var1, var2, var3)
,所以 nest(!!!condition_vars)
会给我一个警告。
我能想到的最好的是
df <- tibble(x = c(1, 1, 1, 2, 2, 3), y = 1:6, z = 6:1)
vars <- exprs(y, z)
nest(df, data = !!call2("c", !!!vars))
但肯定有更好的方法...
你可以nest(df, data = c(!!!vars))
.
但如今,如果表达式是简单的列名,我会将它们存储在字符向量中。您可以在选择上下文中提供带有 all_of()
的字符向量。在 mutate()
或 group_by()
等动作动词中,使用 across()
创建一个选择上下文,您可以在其中使用 all_of()
(以及其他功能,例如 starts_with()
)。
cols <- c("cyl", "am")
mtcars %>% group_by(across(all_of(cols))
mtcars %>% nest(data = all_of(cols))