在R中作为data.frame的big.matrix

在R中作为data.frame的big.matrix,r,dataframe,ranking,ehcache-bigmemory,r-bigmemory,R,Dataframe,Ranking,Ehcache Bigmemory,R Bigmemory,我最近开始使用R进行数据分析。现在我在给一个大的查询数据集排序时遇到了一个问题(ASCII模式下大约1GB,二进制模式下我的笔记本电脑4GB内存)。为此数据集使用bigmemory::big.matrix是一个很好的解决方案,但是在gbm()或randomForest()算法中提供这样的矩阵“m”会导致错误: cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame 类(m)输出

我最近开始使用R进行数据分析。现在我在给一个大的查询数据集排序时遇到了一个问题(ASCII模式下大约1GB,二进制模式下我的笔记本电脑4GB内存)。为此数据集使用
bigmemory::big.matrix
是一个很好的解决方案,但是在
gbm()
randomForest()算法中提供这样的矩阵“m”会导致错误:

cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame
类(m)输出以下内容:

[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

有没有一种方法可以正确地将一个
big.matrix
实例传递到这些算法中?

我显然无法使用您的量表数据进行测试,但我可以使用每个函数的公式接口重现您的错误:

require(bigmemory)
m <- matrix(sample(0:1,5000,replace = TRUE),1000,5)
colnames(m) <- paste("V",1:5,sep = "")

bm <- as.big.matrix(m,type = "integer")

require(gbm)
require(randomForest)

#Throws error you describe
rs <- randomForest(V1~.,data = bm)
#Runs without error (with a warning about the response only having two values)
rs <- randomForest(x = bm[,-1],y = bm[,1])

#Throws error you describe
rs <- gbm(V1~.,data = bm)
#Runs without error
rs <- gbm.fit(x = bm[,-1],y = bm[,1])
require(大内存)

m通常情况下,数字对象占用的内存大于磁盘空间。向量或矩阵中的每个“double”元素需要8个字节。将对象强制为data.frame时,可能需要将其复制到RAM中。您应该避免尝试使用bigmemory/big***软件包套件支持的函数和数据结构之外的函数和数据结构。“biglm”是可用的,但我怀疑您能否期望gbm()或randomForest()识别并使用“大”系列中的设施。

如果其他解决方案失败,您可能希望尝试一次革命。我不知道它是否支持
randomForest
,但我认为它们支持大内存需求。例如,请参见
http://www.revolutionanalytics.com/products/enterprise-big-data.php
。请注意,它是专有软件。有一个免费的学术版本。你能提供你正在使用的实际
gbm
randomfreest
呼叫吗?具体来说,您是否正在使用
随机森林
的公式界面?我是否可以使用
as.big.matrix
数据.frame
转换为
大.matrix
?因为当我转换时,我无法访问转换后的“big.matrix”元素,如:
>cp2006.big.matrix类(cp.2006)[1]“data.frame”>class(cp2006.big.matrix)[1]“big.matrix”attr(,“package”)[1]“bigmemory”>cp2006.big.matrix类的对象“big.matrix”Slot“address”: