我使用一些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
... ... ...
我试图根据Var1和Var2预测价格。
我提出的问题是Var1和Var2是分类/因子变量 Var1和Var2各有3个级别(1,2和3),但数据集中只有6种组合
(1,1; 1,2; 1,3; 2,2; 2,3; 3,3)
要在biglm()
中使用因子变量,它们必须出现在biglm
使用的每个数据块中(我的理解是biglm
将数据集分成'x'个数量的块并在分析每个块后更新回归参数,以便处理大于RAM的数据集。
我试图对数据进行分组,但我的计算机无法处理它或我的代码错误:
bm11 <- big.matrix(150000000, 3)
bm11 <- subset(x, x[,2] == 1 & x[,3] == 1)
上面给了我一堆这些:
Error: cannot allocate vector of size 1.1 Gb
有没有人有解决这个问题的建议?
我在Windows 7机器上使用R 64位w / 4演出RAM。
答案 0 :(得分:9)
您不需要每个块中存在的所有数据或所有值,您只需要考虑所有级别。这意味着您可以拥有这样的块:
curchunk <- data.frame( Price=c(12.45, 33.67), Var1=factor( c(1,1), levels=1:3),
Var2 = factor( 1:2, levels=1:3 ) )
它会起作用。即使Var1中只有1个值,Var2中只有2个值,但两者都存在所有三个级别,因此它会做正确的事情。
此外,biglm
不会将数据分成多个块,但是您希望为其提供可管理的块。通过示例来更好地了解这一点。使用biglm
的常用方法是从文件或数据库中读取,读取第一个“n”行(其中“n”是合理的子集)并将它们传递给biglm
(可能在确定之后)所有因素都指定了所有级别),然后从内存中删除该数据块并在下一行'n'行中读取并将其传递给update
,继续此操作直到文件末尾删除使用过的块每次(所以你有足够的记忆空间用于下一个)。