2014-01-27 57 views
2

我得到這個錯誤「無法分配向量在R大小爲11.8 Gb」,因爲我的桌面有8 GB的RAM和矩陣的大小,我用的是3000x52128。不能在R大小爲11.8 Gb的分配向量

在這裏是任何解決方案,以避免這種內存錯誤? 即使我試圖減小矩陣的大小爲1500x52128,我也得到相同的錯誤和相同的大小爲11.8 Gb。

那我該怎麼辦? 只有一種解決方案是使用16 GB內存在計算機上工作?

添加評論:
當下面的命令運行時,我得到了這個錯誤。

svmDS <- read.csv("TrainDataSet_ver1.2.csv"); 
model<-naiveBayes(as.factor(class)~., data=svmDS) 
+0

那麼,仔細考慮是否需要執行創建11.8 GB矢量的操作。你的矩陣並不是很大,所以你的代碼有可能做一些你沒有想到或者可能以不同的(更高效的)方式實現的東西。 – Roland

+1

假設8字節值(也許是文本?),那麼矩陣應該是大約1.2GB。你的代碼正在做其他的事情,正如小矩陣清楚地表明沒有做出更小的內存分配。如果你想得到一個好的答案,你需要發佈更多的細節。 – John

+0

我真的很抱歉傢伙。我添加了評論 –

回答

2

下面的函數有助於通過刪除工作空間中已有的大對象來釋放工作空間。 這不是直接解決您的問題。但它也有幫助。

.ls.objects <- function (pos = 1, pattern, order.by, 
         decreasing=FALSE, head=FALSE, n=5) { 
    napply <- function(names, fn) sapply(names, function(x) 
             fn(get(x, pos = pos))) 
    names <- ls(pos = pos, pattern = pattern) 
    obj.class <- napply(names, function(x) as.character(class(x))[1]) 
    obj.mode <- napply(names, mode) 
    obj.type <- ifelse(is.na(obj.class), obj.mode, obj.class) 
    obj.prettysize <- napply(names, function(x) { 
          capture.output(print(object.size(x), units = "auto")) }) 
    obj.size <- napply(names, object.size) 
    obj.dim <- t(napply(names, function(x) 
         as.numeric(dim(x))[1:2])) 
    vec <- is.na(obj.dim)[, 1] & (obj.type != "function") 
    obj.dim[vec, 1] <- napply(names, length)[vec] 
    out <- data.frame(obj.type, obj.size, obj.prettysize, obj.dim) 
    names(out) <- c("Type", "Size", "PrettySize", "Rows", "Columns") 
    if (!missing(order.by)) 
     out <- out[order(out[[order.by]], decreasing=decreasing), ] 
    if (head) 
     out <- head(out, n) 
    out 
} 

lsos <- function(..., n=10) { 
    .ls.objects(..., order.by="Size", decreasing=TRUE, head=TRUE, n=n) 
} 

lsos() 

這將顯示在您的工作空間中的對象的列表,並偶爾rm()其中的一些。

+1

還有其他答案在這裏:http://stackoverflow.com/questions/1358003/tricks-to-manage-the-available-memory-in-an-r-session?rq = 1 – RUser

相關問題