簡體   English   中英

big.matrix作為R中的data.frame

[英]big.matrix as data.frame in R

我最近開始使用R進行數據分析。 現在我在排序一個大的查詢數據集時遇到了問題(在ASCII模式下約為1 GB,在我的筆記本電腦的二進制模式下的4GB RAM中)。 對這個數據集使用bigmemory::big.matrix是一個不錯的解決方案,但是在gbm()randomForest()算法中提供這樣的矩陣“m”會導致錯誤:

cannot coerce class 'structure("big.matrix", package = "bigmemory")' into a data.frame

class(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的公式接口對於大型數據集randomForest是相當常見的建議; 它可能效率很低。 如果您閱讀?gbm ,您會看到一個類似的建議,也可以指導您使用gbm.fit獲取大數據。

通常情況下,數字對象占用的內存大於磁盤空間。 向量或矩陣中的每個“double”元素占用8個字節。 當您將對象強制轉換為data.frame時,可能需要將其復制到RAM中。 您應該避免嘗試使用bigmemory / big ***套件支持的函數和數據結構。 “biglm”可用,但我懷疑你可以期待gbm()或randomForest()來識別和使用“大”家庭中的設施。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM