big.matrix作为data.frame r
-
25-10-2019 - |
题
我最近开始使用R进行数据分析。现在,我在排名一个大查询数据集(在ASCII模式下进行〜1 GB,在我的笔记本电脑的4GB RAM上以二进制模式为单位)有问题。使用 bigmemory::big.matrix
对于此数据集是一个不错的解决方案,但是在 gbm()
或者 randomForest()
算法导致错误:
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])
不使用公式接口 randomForest
对于大型数据集是相当普遍的建议;它效率很低。如果您阅读 ?gbm
, ,您会看到类似的建议将您转向 gbm.fit
对于大数据也是如此。
其他提示
通常情况下,数字对象占据的内存不仅仅是磁盘空间。向量或矩阵中的每个“双”元素都采用8个字节。当您将对象胁迫到数据框时,可能需要在RAM中复制它。您应该避免尝试使用由BigMemory/Big ***套件支持的功能和数据结构。可以使用“ BigLM”,但我怀疑您是否可以期望GBM()或RandomForest()识别和使用“ Big”家族中的设施。
不隶属于 StackOverflow