处理非常大的ex​​pand.grid?

Ste*_*veS 3 r sparse-matrix

我给了31个二进制变量,为简单起见,我们称之为 x_1, ..., x_31.

每个X_i = c(0, 1).

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

错误:无法分配大小为16.0 Gb的向量.

我知道我可以sparsify这样但我怎么能处理大尺寸?

使用sparsify提供相同的错误消息,但使用8 Gb.

请指教.

Sté*_*ent 6

评论太长了,@ 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
Run Code Online (Sandbox Code Playgroud)

这张表有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
Run Code Online (Sandbox Code Playgroud)

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

f <- function(i) as.integer(rev(intToBits(i)))[-1]
Run Code Online (Sandbox Code Playgroud)

然后f(i-1)恰好提供线iexpand.grid(x1, ..., x31).