我给了31个二进制变量,为简单起见,我们称之为
x_1, ..., x_31
。
每个X_i = c(0, 1)
。
我需要构建一个选项树。我已经使用expand.grid但我的服务器抛出错误:
错误:无法分配大小为16.0 Gb的矢量。
我知道我可以sparsify
这个,但我怎么能处理大尺寸?
使用sparsify
会显示相同的错误消息,但会使用8 Gb
。
请告知。
答案 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)
。