在不指定元素数量的情况下获得逻辑变量的所有可能组合[重复]

Posted

技术标签:

【中文标题】在不指定元素数量的情况下获得逻辑变量的所有可能组合[重复]【英文标题】:Obtain all possible combinations of logical variables without specifying the number of elements [duplicate] 【发布时间】:2019-07-11 19:55:34 【问题描述】:

我正在尝试获取向量的所有组合。我有

x <- c(1,2,3)

我需要在不指定所需元素数量且不考虑顺序的情况下获取所有可能的组合(解决方案2,3,11,2,3 相同)。例如,结果将是:


3
2
2,3
1
1,3
1,2
1,2,3

一个近似值是制作下表:

我确信必须有一些函数来执行此任务,而不是创建表并从中形成解决方案,因为它不是很乏味。

【问题讨论】:

您正在寻找电源组。从库rje 中查看powerset 函数。 @JosephWood 哦,是的,这是我要找的,你可以把这个评论当作检查的答案吗? 我无法发帖,因为这个问题已被标记为重复。不管怎样,我很高兴你能弄明白。 【参考方案1】:

使用expand.grid

out <- expand.grid(rep(list(c(1, 0)), length(x)))
out
#  Var1 Var2 Var3
#1    1    1    1
#2    0    1    1
#3    1    0    1
#4    0    0    1
#5    1    1    0
#6    0    1    0
#7    1    0    0
#8    0    0    0

如果我们需要组合 - 作为一个列表 - 我们可能会这样做

split(out * col(out), 1:nrow(out))
#$`1`
#[1] 1 2 3
#
#$`2`
#[1] 0 2 3
#
#$`3`
#[1] 1 0 3
#
#$`4`
#[1] 0 0 3
#
#$`5`
#[1] 1 2 0
#
#$`6`
#[1] 0 2 0
#
#$`7`
#[1] 1 0 0
#
#$`8`
#[1] 0 0 0

或者,如果我们不需要0s,我们可能会这样做

by(out * col(out), 1:nrow(out), FUN = function(x) x[x != 0])

bylapply(split(... 的缩写)

【讨论】:

我可能没有解释清楚,我不需要创建表格,我需要创建组合,表格的使用是我接近解决方案的一个示例 @Draggluon 更新了我的答案。希望这会有所帮助。

以上是关于在不指定元素数量的情况下获得逻辑变量的所有可能组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在不重复选择的情况下找到所有可能的组合?

如何(廉价)计算 n 个可能元素的所有可能的长度-r 组合

如何在不水平滚动的情况下获得适合editText的符号数量?

如何在不实际拆包的情况下获得 Perl 中打包项目的数量?

如何在不指定集群数量的情况下对列表中的项目进行集群

使用递归和回溯生成所有可能的组合