我正在尝试生成由0和1组成的长向量(30个元素)的所有可能排列。我尝试了几个函数,包括permn和expand.grid,但它们似乎都没有能够解决这个问题(由于尺寸限制)。
任何建议都会非常有用!
答案 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