将符号向量转换为“...”的输入
Converting a vector of symbols to input for `...`
我有一个 R 函数,我想将符号向量 (c(a, b)
) 转换为 ...
的输入(例如 a, b
)。
# create data
set.seed(1)
data <- dplyr::tibble(a = sample(1:5, size = 10, replace = TRUE),
b = sample(1:5, size = 10, replace = TRUE))
该函数应如下所示:
f <- function(category) {
# trying to work out
}
f(category = c(a,b))
并给出结果:
data |>
tidyr::expand(tidyr::nesting(a, b))
困难在于我的函数将输入作为符号向量提供,而 rlang::nesting
将输入作为 ...
。
如何从一种格式转换为另一种格式?或者我应该使用 rlang::nesting
以外的其他函数吗?
通过 c()
提供一组变量的接口应该基于 tidyselect。最简单的方法是使用 select()
.
先选区再拼接数据:
f <- function(data, category) {
sel <- dplyr::select(data, {{ category }})
tidyr::expand(data, tidyr::nesting(!!!sel))
}
f(data, category = c(a, b))
#> # A tibble: 8 × 2
#> a b
#> <int> <int>
#> 1 1 2
#> 2 1 5
#> 3 2 2
#> 4 2 5
#> 5 3 1
#> 6 3 5
#> 7 4 5
因为您是通过 select()
连接的,所以您获得了所有 tidyselect 功能:
f(data, category = starts_with(c("a", "b")))
我有一个 R 函数,我想将符号向量 (c(a, b)
) 转换为 ...
的输入(例如 a, b
)。
# create data
set.seed(1)
data <- dplyr::tibble(a = sample(1:5, size = 10, replace = TRUE),
b = sample(1:5, size = 10, replace = TRUE))
该函数应如下所示:
f <- function(category) {
# trying to work out
}
f(category = c(a,b))
并给出结果:
data |>
tidyr::expand(tidyr::nesting(a, b))
困难在于我的函数将输入作为符号向量提供,而 rlang::nesting
将输入作为 ...
。
如何从一种格式转换为另一种格式?或者我应该使用 rlang::nesting
以外的其他函数吗?
通过 c()
提供一组变量的接口应该基于 tidyselect。最简单的方法是使用 select()
.
先选区再拼接数据:
f <- function(data, category) {
sel <- dplyr::select(data, {{ category }})
tidyr::expand(data, tidyr::nesting(!!!sel))
}
f(data, category = c(a, b))
#> # A tibble: 8 × 2
#> a b
#> <int> <int>
#> 1 1 2
#> 2 1 5
#> 3 2 2
#> 4 2 5
#> 5 3 1
#> 6 3 5
#> 7 4 5
因为您是通过 select()
连接的,所以您获得了所有 tidyselect 功能:
f(data, category = starts_with(c("a", "b")))