Lil*_*imo 6 combinations r list
我有两个向量:
group1 <- c("a", "b")
group2 <- c("c", "d", "e")
Run Code Online (Sandbox Code Playgroud)
我想要获取“group1”中的一个元素与“group2”中的一个或两个元素的所有组合。
期望的结果是:
"a" "c" # one element from group1, one element from group 2
"b" "c"
"a" "d"
"b" "d"
"a" "e"
"b" "e"
"a" "c" "d" # one element from group1, two elements from group 2
"b" "c" "d"
"a" "c" "e"
"b" "c" "e"
"a" "d" "e"
"b" "d" "e"
Run Code Online (Sandbox Code Playgroud)
允许任何输入向量以及从每个向量中获取的最大/最小字符数的完全通用解决方案是:
comb <- function(a, b, min_a = 1, max_a = 1, min_b = 1, max_b = 2) {
as <- do.call(c, lapply(min_a:max_a, \(i) combn(a, i, simplify = FALSE)))
bs <- do.call(c, lapply(min_b:max_b, \(i) combn(b, i, simplify = FALSE)))
apply(expand.grid(as, bs), 1, unlist, use.names = FALSE)
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,这将给出:
comb(group1, group2)
#> [[1]]
#> [1] "a" "c"
#>
#> [[2]]
#> [1] "b" "c"
#>
#> [[3]]
#> [1] "a" "d"
#>
#> [[4]]
#> [1] "b" "d"
#>
#> [[5]]
#> [1] "a" "e"
#>
#> [[6]]
#> [1] "b" "e"
#>
#> [[7]]
#> [1] "a" "c" "d"
#>
#> [[8]]
#> [1] "b" "c" "d"
#>
#> [[9]]
#> [1] "a" "c" "e"
#>
#> [[10]]
#> [1] "b" "c" "e"
#>
#> [[11]]
#> [1] "a" "d" "e"
#>
#> [[12]]
#> [1] "b" "d" "e"
Run Code Online (Sandbox Code Playgroud)
创建于 2022-09-03,使用reprex v2.0.2