处理非常大的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
行。
我有 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
行。