首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中将big.matrix作为data.frame

在R中将big.matrix作为data.frame
EN

Stack Overflow用户
提问于 2011-11-30 02:12:56
回答 2查看 5.7K关注 0票数 7

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

代码语言:javascript
复制
cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame

class(m)输出以下内容:

代码语言:javascript
复制
[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-30 02:42:38

我显然不能使用您的规模的数据来测试这一点,但我可以使用每个函数的公式接口来重现您的错误:

代码语言:javascript
复制
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来处理大数据。

票数 12
EN

Stack Overflow用户

发布于 2011-11-30 02:42:49

通常情况下,数值对象占用的内存多于磁盘空间。向量或矩阵中的每个“双精度”元素需要8个字节。当您将对象强制到data.frame时,可能需要将其复制到内存中。您应该避免尝试使用bigmemory/big*包套件所支持的函数和数据结构。"biglm“是可用的,但我怀疑您不能期望gbm()或randomForest()能够识别和使用”大“-family中的工具。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8315575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档