R:生成1和0的所有可能组合

时间:2017-06-26 18:36:35

标签: r

我正在尝试生成由0和1组成的长向量(30个元素)的所有可能排列。我尝试了几个函数,包括permn和expand.grid,但它们似乎都没有能够解决这个问题(由于尺寸限制)。

任何建议都会非常有用!

2 个答案:

答案 0 :(得分:1)

您需要的是多重排列。

> library(iterpc)
> I <- iterpc(c(16, 14), labels=c(0,1), ordered=TRUE)
> getlength(I)
[1] 145422675

矩阵为145422675×30,太大而无法存储在单个矩阵中。使用getnext获取下一个10000000个排列。

> getnext(I, 10000000)

您可以重复上述15次以获得所有排列。

答案 1 :(得分:0)

一个简单而天真的实施......

system.time(x <- combn(30,14))
# user  system elapsed 
# 252.42    2.17  254.98 

pryr::object_size(x)
# 8.14 GB

dim(x)
# [1]        14 145422675

system.time(
  apply(x[,1:1e6],2,function(index){
    V <- rep(0,30)
    V[index] <- 1
    return(V)
  } )
)
# user  system elapsed 
# 8.23    0.24    8.52 

除非有充分的理由,否则我不会运行整个x