【问题标题】:Permutations of list elements in RR中列表元素的排列
【发布时间】:2021-04-01 20:11:11
【问题描述】:

我正在尝试获取部分列表元素的排列。我可以得到常规排列

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

【问题讨论】:

    标签: r permutation


    【解决方案1】:

    您将需要使用能够一次生成长度为 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"
    

    【讨论】:

      【解决方案2】:

      我们可以使用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"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-17
        • 1970-01-01
        • 2012-02-07
        • 1970-01-01
        • 2018-05-08
        • 2015-08-03
        • 2021-05-17
        相关资源
        最近更新 更多