【问题标题】:Generating Permutations of Values Within Multiple Lists [duplicate]在多个列表中生成值的排列
【发布时间】:2016-08-10 17:17:04
【问题描述】:

我正在尝试通过从 3 个不同列表中获取 1 个值来生成排列

l <- list(A=c(1:13), B=c(1:5), C=c(1:3))

期望的结果 => 所有排列的矩阵,其中第一个值可以是 1-13,第二个值可以是 1-5,第三个值可以是 1-3

我尝试使用组合包中的 permn,但它似乎只是重新排列了 3 个列表。

> permn(l)
[[1]]
[[1]]$A
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13

[[1]]$B
[1] 1 2 3 4 5

[[1]]$C
[1] 1 2 3


[[2]]
[[2]]$A
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13

[[2]]$C
[1] 1 2 3

[[2]]$B
[1] 1 2 3 4 5
....

预期输出

     [,1] [,2] [,3]
[1,]    1    1    3
[2,]    1    2    1
[3,]    1    1    2
[4,]    1    1    3
and so on...

【问题讨论】:

  • 你的预期输出是什么
  • 以上更新。理想情况下只是一个具有 3 列和 (13 x 5 x 3) 195 种可能排列的矩阵
  • @akrun 我不知道理查德是否对你的回答投了反对票,但这与这是一个受骗的受骗的受骗的受骗的受骗的事实无关。为什么要重新打开它?
  • @akrun 我不明白。你说这不是骗子?投票问题似乎是个小插曲。一般来说,虽然投票是个人的选择,但不可避免地基于一些主观因素;骗子是值得一起解决的问题。
  • @akrun 好的,但这并不能证明重新打开是合理的。如果您与某人有问题,在 cmets 中指责他们并滥用 - 是的,这个词适合这里 - 关闭/重新开放并不是真正解决问题的正确方法。

标签: r permutation


【解决方案1】:

我们可以使用expand.grid。可以直接申请list

expand.grid(l)

【讨论】:

    【解决方案2】:

    你可以使用do.callexpand.grid创建一个数据框,如果你真的需要一个矩阵,那么在结果上使用as.matrix

    > l <- list(A=c(1:13), B=c(1:5), C=c(1:3))
    > out <- do.call(expand.grid, l)
    > head(out)
      A B C
    1 1 1 1
    2 2 1 1
    3 3 1 1
    4 4 1 1
    5 5 1 1
    6 6 1 1
    > tail(out)
         A B C
    190  8 5 3
    191  9 5 3
    192 10 5 3
    193 11 5 3
    194 12 5 3
    195 13 5 3
    > tail(as.matrix(out))
            A B C
    [190,]  8 5 3
    [191,]  9 5 3
    [192,] 10 5 3
    [193,] 11 5 3
    [194,] 12 5 3
    [195,] 13 5 3
    > 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多