我正在尝试获取向量的所有组合。我有
x <- c(1,2,3)
我需要获得所有可能的组合,而无需指定所需的元素数量并且不考虑顺序(解决方案{2,3,1}
与{1,2,3}
相同)。例如,结果将是:
{}
{3}
{2}
{2,3}
{1}
{1,3}
{1,2}
{1,2,3}
一个近似值是制作下表:
我确信必须有一些函数来执行此任务,而不是创建表并从中形成解决方案,因为它不是很繁琐。
答案 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])
({by
是lapply(split(...
的缩写)