处理非常大的expand.grid?

Dealing with very large expand.grid?

我有 31 个二进制变量,为简单起见,我们称它们为 x_1, ..., x_31.

每个 X_i = c(0, 1).

我需要构建一个选项树。我为此使用了 expand.grid 但我的服务器抛出错误:

Error: cannot allocate vector of size 16.0 Gb.

我知道我可以 sparsify 这个但是我该如何处理大尺寸?

使用 sparsify 给出相同的错误消息,但使用 8 Gb

请指教

评论太长了,@steves 要求我详细说明我的评论。举个例子

> expand.grid(c(0,1), c(0,1), c(0,1))
  Var1 Var2 Var3
1    0    0    0
2    1    0    0
3    0    1    0
4    1    1    0
5    0    0    1
6    1    0    1
7    0    1    1
8    1    1    1

这个 table 有 2^3=8 行。在第 i 行,这是 i-1:

的二进制展开
> f <- function(i) as.integer(rev(intToBits(i)))
> f(6-1) # this gives line 6, with some heading 0's
 [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1

expand.grid(x1, ..., x31)2^31 行。 f(i) 的输出是一个 32 位的向量。因此,如果您通过删除第一个数字来修改 f

f <- function(i) as.integer(rev(intToBits(i)))[-1]

然后 f(i-1) 正好提供 expand.grid(x1, ..., x31) 的第 i 行。