我希望创建包含两个不同值的向量的所有可能排列,其中我控制每个值的比例。
例如,如果我有一个长度为 3 的向量,并且我想要包含单个 1 的所有可能组合,则我所需的输出是一个如下所示的列表:
list.1 <- list(c(1,0,0), c(0,1,0), c(0,0,1))
相反,如果我想要包含三个 1 的所有可能组合,我想要的输出是一个如下所示的列表:
list.3 <- list(c(1,1,1))
换句话说,模式1
and 0
价值观很重要,但一切1
s 应被视为与所有其他相同1
s.
根据此处和其他地方的搜索,我尝试了几种方法:
expand.grid(0:1, 0:1, 0:1) # this includes all possible combinations of 1, 2, or 3 ones
permn(c(0,1,1)) # this does not treat the ones as identical (e.g. it produces (0,1,1) twice)
unique(permn(c(0,1,1))) # this does the job!
因此,使用该函数permn
从包装中combinat
看起来很有希望。然而,当我将其扩展到我的实际问题时(长度为 20 的向量,其中 50% 为 1,50% 为 0),我遇到了问题:
unique(permn(c(rep(1,10), rep(0, 10))))
# returns the error:
Error in vector("list", gamma(n + 1)) :
vector size specified is too large
我的理解是,发生这种情况是因为,在呼吁permn
,它会生成一个包含所有可能排列的列表,即使其中许多排列是相同的,而且这个列表对于 R 来说太大了,无法处理。
有人对如何解决这个问题有建议吗?
抱歉,如果之前已经回答过这个问题 - 有很多很多包含相似语言但不同问题的问题,我无法找到满足我需求的解决方案!