我使用一些big.___()软件包在R中使用大型数据集.这是~10演出(100mmR x 15C),看起来像这样:
Price Var1 Var2
12.45 1 1
33.67 1 2
25.99 3 3
14.89 2 2
23.99 1 1
... ... ...
Run Code Online (Sandbox Code Playgroud)
我试图根据Var1和Var2预测价格.
我提出的问题是Var1和Var2是分类/因子变量.
Var1和Var2各有3个级别(1,2和3),但数据集中只有6个组合
(1,1; 1,2; 1,3; 2,2; 2,3; 3,3)
Run Code Online (Sandbox Code Playgroud)
要使用因子变量,biglm()它们必须存在于每个biglm使用的数据块中(我的理解是biglm将数据集分解为"x"个块,并在分析每个块后更新回归参数,以便绕过处理数据集比RAM大.)
我试图对数据进行分组,但我的计算机无法处理它或我的代码错误:
bm11 <- big.matrix(150000000, 3)
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1)
Run Code Online (Sandbox Code Playgroud)
上面给了我一堆这些:
Error: cannot allocate vector of size 1.1 Gb
Run Code Online (Sandbox Code Playgroud)
有没有人有解决这个问题的建议?
我在Windows 7机器上使用R 64位w/4演出RAM.
您不需要每个块中存在的所有数据或所有值,您只需要考虑所有级别.这意味着您可以拥有这样的块:
curchunk <- data.frame( Price=c(12.45, 33.67), Var1=factor( c(1,1), levels=1:3),
Var2 = factor( 1:2, levels=1:3 ) )
Run Code Online (Sandbox Code Playgroud)
它会起作用.即使Var1中只有1个值,Var2中只有2个值,但两者都存在所有三个级别,因此它将执行正确的操作.
也biglm不会为您分解数据块,但希望您能够使用可管理的块.通过示例来更好地了解这一点.一种常见的方法biglm是从文件或数据库中读取,在第一个'n'行中读取(其中'n'是一个合理的子集)并将它们传递给biglm(可能在确保所有因子都具有指定的所有级别之后),然后从内存中删除该数据块并读入下一行'n'并将其传递给update,继续执行此操作,直到文件末尾每次都删除使用过的块(因此您有足够的内存空间用于下一个).