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

时间:2018-06-03 09:51:18

标签: r sparse-matrix

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

每个X_i = c(0, 1)

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

  

错误:无法分配大小为16.0 Gb的矢量。

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

使用sparsify会显示相同的错误消息,但会使用8 Gb

请告知。

1 个答案:

答案 0 :(得分: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

此表格有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)完全提供i的行expand.grid(x1, ..., x31)