我给了31个二进制变量,为简单起见,我们称之为
x_1, ..., x_31.
每个X_i = c(0, 1).
我需要构建一个选项树.我已经使用expand.grid但我的服务器抛出一个错误:
错误:无法分配大小为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
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)恰好提供线i的expand.grid(x1, ..., x31).