R中列表元素的排列
Permutations of list elements in R
我正在尝试获取部分列表元素的排列。我可以用
得到规则的排列
my_list <- list('A' = c("A"), 'B'= c('B', 'B'), "C" = c('C', "C", "C"))
combinat::permn(my_list)
但是,我只需要 3 个可能的元素中的 2 个,例如combinat::permn(my_list)[[1]][1:2]
将是期望的结果之一
combinat::permn(my_list)[[1]][1:2]
$A
[1] "A"
$B
[1] "B" "B"
combinat::permn
不允许这些 'partial' 排列。获得部分排列的好方法是什么?
我们可以使用combn
combn(my_list, 2, simplify = FALSE)
-输出
[[1]]
[[1]]$A
[1] "A"
[[1]]$B
[1] "B" "B"
[[2]]
[[2]]$A
[1] "A"
[[2]]$C
[1] "C" "C" "C"
[[3]]
[[3]]$B
[1] "B" "B"
[[3]]$C
[1] "C" "C" "C"
您将需要使用能够生成长度排列的包之一 n 一次选择 m(参见此 How to generate permutations or combinations of object in R? 了解更多信息)。然后,您可以遍历行并对原始列表进行子集化:
library(gtools)
apply(permutations(length(my_list), 2), 1, function(x) {
my_list[x]
})
[[1]]
[[1]]$A
[1] "A"
[[1]]$B
[1] "B" "B"
[[2]]
[[2]]$A
[1] "A"
[[2]]$C
[1] "C" "C" "C"
[[3]]
[[3]]$B
[1] "B" "B"
[[3]]$A
[1] "A"
[[4]]
[[4]]$B
[1] "B" "B"
[[4]]$C
[1] "C" "C" "C"
[[5]]
[[5]]$C
[1] "C" "C" "C"
[[5]]$A
[1] "A"
[[6]]
[[6]]$C
[1] "C" "C" "C"
[[6]]$B
[1] "B" "B"
我正在尝试获取部分列表元素的排列。我可以用
得到规则的排列my_list <- list('A' = c("A"), 'B'= c('B', 'B'), "C" = c('C', "C", "C"))
combinat::permn(my_list)
但是,我只需要 3 个可能的元素中的 2 个,例如combinat::permn(my_list)[[1]][1:2]
将是期望的结果之一
combinat::permn(my_list)[[1]][1:2]
$A
[1] "A"
$B
[1] "B" "B"
combinat::permn
不允许这些 'partial' 排列。获得部分排列的好方法是什么?
我们可以使用combn
combn(my_list, 2, simplify = FALSE)
-输出
[[1]]
[[1]]$A
[1] "A"
[[1]]$B
[1] "B" "B"
[[2]]
[[2]]$A
[1] "A"
[[2]]$C
[1] "C" "C" "C"
[[3]]
[[3]]$B
[1] "B" "B"
[[3]]$C
[1] "C" "C" "C"
您将需要使用能够生成长度排列的包之一 n 一次选择 m(参见此 How to generate permutations or combinations of object in R? 了解更多信息)。然后,您可以遍历行并对原始列表进行子集化:
library(gtools)
apply(permutations(length(my_list), 2), 1, function(x) {
my_list[x]
})
[[1]]
[[1]]$A
[1] "A"
[[1]]$B
[1] "B" "B"
[[2]]
[[2]]$A
[1] "A"
[[2]]$C
[1] "C" "C" "C"
[[3]]
[[3]]$B
[1] "B" "B"
[[3]]$A
[1] "A"
[[4]]
[[4]]$B
[1] "B" "B"
[[4]]$C
[1] "C" "C" "C"
[[5]]
[[5]]$C
[1] "C" "C" "C"
[[5]]$A
[1] "A"
[[6]]
[[6]]$C
[1] "C" "C" "C"
[[6]]$B
[1] "B" "B"