首页 > 解决方案 > 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不允许这些“部分”排列。什么是获得部分排列的好方法?

标签: rpermutation

解决方案


您将需要使用能够一次生成长度为 n 的排列的软件包之一有关更多信息,请参阅如何在 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"

推荐阅读