在不指定元素数量的情况下获取逻辑变量的所有可能组合

时间:2019-02-18 12:19:09

标签: r binary combinations

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

x <- c(1,2,3)

我需要获得所有可能的组合,而无需指定所需的元素数量并且不考虑顺序(解决方案{2,3,1}{1,2,3}相同)。例如,结果将是:

{}
{3}
{2}
{2,3}
{1}
{1,3}
{1,2}
{1,2,3}

一个近似值是制作下表:

Tabla lógica

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

1 个答案:

答案 0 :(得分:2)

使用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

或者,如果我们不需要0,则可能需要

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

({bylapply(split(...的缩写)