我希望创建一个包含两个不同值的向量的所有可能排列,我想控制每个值的比例。例如,如果我有一个长度为三的向量,我想要包含单个1的所有可能组合,我的期望输出是一个列表,看起来像这样:
相反,如果我想要包含三个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
和0
值的模式很重要,但所有的1
应被视为与其他1
相同。根据在这里和其他地方搜索的结果,我尝试了几种方法:
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!
因此,使用来自包 combinat
的函数 permn
看起来很有前途。然而,当我将其扩展到我的实际问题(一个长度为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来说太大了,因此会出现这种情况。
是否有人有解决方法?
如果以前已经回答过这个问题,请原谅我,因为有很多类似语言但不同问题的SO问题,我找不到符合我的需求的解决方案!