最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

R語言-解決處理矩陣遇到內(nèi)存不足的問題

 更新時(shí)間:2021年04月22日 11:42:49   作者:lww1993  
這篇文章主要介紹了R語言-解決處理矩陣遇到內(nèi)存不足的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

如下:

Error : cannot allocate vector of size X Gb

類似于這種問題的可能處理辦法:

1. 可以用matrix盡量不要用data frame;

2. 可以用integer matrix盡量不要用 double matrix;

3. 對于大量運(yùn)算后最好加上一個(gè)gc(), 強(qiáng)制R語言回收內(nèi)存;

4. 對于大矩陣而言用bigmemory包,可以將大矩陣放到臨時(shí)文件中,不占用內(nèi)存。

補(bǔ)充:R語言之內(nèi)存管理

在處理大型數(shù)據(jù)過程中,R語言的內(nèi)存管理就顯得十分重要,以下介紹幾種常用的處理方法。

1,設(shè)置軟件的內(nèi)存

memory.size(2048) #設(shè)置內(nèi)存大小   
memory.size(NA) #查看當(dāng)前設(shè)置下最大內(nèi)存 
#or  
memory.limit()   
memory.size(F) #查看當(dāng)前已使用的內(nèi)存   
#or   
library(pryr)   
mem_used()   
   
mem_change(x <- 1:1e6) #查看執(zhí)行命令時(shí)內(nèi)存的變化   
memory.size(T)  #查看已分配的內(nèi)存

注意剛開始時(shí)已使用內(nèi)存和已分配內(nèi)存是同步增加的,但是隨著R中的垃圾被清理,已使用內(nèi)存會(huì)減少,而已分配給R的內(nèi)存一般不會(huì)改變。

2,對象的存儲(chǔ)

R中的對象在內(nèi)存中存于兩種不同的地方,一種是堆內(nèi)存(heap),其基本單元是“Vcells”,每個(gè)大小為8字節(jié),新來一個(gè)對象就會(huì)申請一塊空間,把值全部存在這里,和C里面的堆內(nèi)存很像。第二種是地址對(cons cells),和LISP里的cons cells道理一樣,主要用來存儲(chǔ)地址信息,最小單元一般在32位系統(tǒng)中是28字節(jié)、64位系統(tǒng)中是56字節(jié)。

ls()           #查看當(dāng)前對象   
object.size()    查看對象所占內(nèi)存   
#or   
library(pryr)   
object_size()  #區(qū)別于前者,它進(jìn)行了換算

1) 新建對象分配合適的內(nèi)存

R會(huì)將新的對象存儲(chǔ)在“連續(xù)”的內(nèi)存中,如果沒有這樣的空間就會(huì)返回“Cannot allocate vector of size...” 的錯(cuò)誤,有以下幾種處理方法:

a) 如果有多個(gè)矩陣需要存儲(chǔ),確保優(yōu)先存儲(chǔ)較大的矩陣,然后依次存儲(chǔ)較小的矩陣.

b) 預(yù)先分配合適的內(nèi)存.

大家都知道R中矩陣的維度并不需要賦一個(gè)固定的值(很多語言的數(shù)組長度不能為變量),這為寫程序帶來了極大的方便,因此經(jīng)常在循環(huán)中會(huì)出現(xiàn)某個(gè)矩陣越來越長的情況,實(shí)際上,矩陣每增長一次,即使賦給同名的變量,都需要新開辟一塊更大的空間,假設(shè)初始矩陣為100K,第二個(gè)為101K,一直增到120K,那么,將會(huì)分別開辟100K、101K一直到120K的連續(xù)堆內(nèi)存,如果一開始就開一塊120K的,使之從101K逐漸增長到120K,將會(huì)大大地節(jié)約內(nèi)存。cbind函數(shù)也是這個(gè)道理,所以在循環(huán)中要注意不要濫用。

c) 換到64位的計(jì)算機(jī),這種問題較少出現(xiàn).

2) 改變當(dāng)前對象的存儲(chǔ)模式

例如某個(gè)矩陣默認(rèn)就是"double"的,如果這個(gè)矩陣的數(shù)值都是整數(shù)甚至0-1,完全沒必要使用double來占用空間,可以將其改為整數(shù)型,可以看到該對象的大小會(huì)變?yōu)樵瓉淼囊话搿?/p>

storage.mode(x) #查看對象的存儲(chǔ)模式 storage.mode(x) <- "integer" #整數(shù)型存儲(chǔ)模式

3) 清理中間對象

rm() #刪除變量的引用,經(jīng)常用它來清理中間對象,其中比較重要的文件可以存在硬盤里,比如csv文件或者RSqlite等

gc() #清理內(nèi)存空間

4) 清理其他對象

.ls.objects() #查看內(nèi)存消耗較大的文件,并處理掉其他無關(guān)對象.代碼如下:

.ls.objects <- function (pos = 1, pattern, order.by = "Size", decreasing=TRUE, head = TRUE, n = 10) {   
  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.size <- napply(names, object.size) / 10^6 # megabytes   
  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.dim)   
  names(out) <- c("Type", "Size", "Rows", "Columns")   
  out <- out[order(out[[order.by]], decreasing=decreasing), ]   
  if (head)   
    out <- head(out, n)   
  out   
} 

3,修改存儲(chǔ)地址

這部分可參考文獻(xiàn)1。在xp系統(tǒng)上試了一下,得到的存儲(chǔ)地址總是不變,不知道xp系統(tǒng)上有沒有效...

4,選取數(shù)據(jù)集的子集

這是沒有辦法的辦法,遲早要處理全部的數(shù)據(jù),不過可以借此調(diào)試代碼或是建模,如在合適的地方清理中間對象

5,寫成腳本文件

Hadley Wickham 建議寫成腳本文件,運(yùn)行后再清理掉臨時(shí)文件

6,使用SOAR包

它可以將特定對象存儲(chǔ)為RData文件并無需加載到內(nèi)存就能進(jìn)行分析

r = data.frame(a=rnorm(10,2,.5),b=rnorm(10,3,.5))   
library(SOAR)   
Sys.setenv(R_LOCAL_CACHE=”testsession”)   
ls()   
Store(r)   
ls()   
mean(r[,1])   
r$c = rnorm(10,4,.5)   
ls()

7,一個(gè)有趣的函數(shù)

它會(huì)告訴你哪一行的代碼消耗了多少時(shí)間、內(nèi)存,釋放多少內(nèi)存,復(fù)制了多少向量.

library(devtools)   
devtools::install_github("hadley/lineprof")   
library(lineprof)   
source("D:/test/test.R")   
prof <- lineprof(test("D:/test/testcsv"))   
shine(prof)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 如何用R語言繪制散點(diǎn)圖

    如何用R語言繪制散點(diǎn)圖

    這篇文章主要介紹了如何用R語言繪制散點(diǎn)圖,幫助大家更好的理解和學(xué)習(xí)使用R語言,感興趣的朋友可以了解下
    2021-03-03
  • R語言寫2048游戲?qū)嵗v解

    R語言寫2048游戲?qū)嵗v解

    這篇文章主要介紹了R語言寫2048游戲?qū)嵗v解,文中將代碼列舉了出來,有感興趣的同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • R語言 ggplot2改變柱狀圖的順序操作

    R語言 ggplot2改變柱狀圖的順序操作

    這篇文章主要介紹了R語言 ggplot2改變柱狀圖的順序操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • linux命令行下使用R語言繪圖實(shí)例講解

    linux命令行下使用R語言繪圖實(shí)例講解

    這篇文章主要介紹了linux命令行下使用R語言繪圖實(shí)例講解,文中實(shí)例講解的很清晰,有需要的同學(xué)可以研究下
    2021-03-03
  • R語言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用

    R語言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用

    這篇文章主要介紹了R語言 數(shù)據(jù)表匹配和拼接 merge函數(shù)的使用說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • R語言通過parallel包實(shí)現(xiàn)多線程運(yùn)行方式

    R語言通過parallel包實(shí)現(xiàn)多線程運(yùn)行方式

    這篇文章主要介紹了R語言通過parallel包實(shí)現(xiàn)多線程運(yùn)行方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言可視化存儲(chǔ)矢量圖實(shí)現(xiàn)方式

    R語言可視化存儲(chǔ)矢量圖實(shí)現(xiàn)方式

    這篇文章主要為大家介紹了R語言存儲(chǔ)矢量圖的實(shí)現(xiàn)方式過程,有需要的朋友可以借鑒參考下,希望能夠有所你幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-11-11
  • R語言數(shù)據(jù)框的合并實(shí)現(xiàn)示例

    R語言數(shù)據(jù)框的合并實(shí)現(xiàn)示例

    有時(shí)數(shù)據(jù)集來自多個(gè)地方,我們需要將兩個(gè)或多個(gè)數(shù)據(jù)集合并成一個(gè)數(shù)據(jù)集,本文主要介紹了R語言數(shù)據(jù)框的合并實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • R語言學(xué)習(xí)VennDiagram包繪制韋恩圖示例

    R語言學(xué)習(xí)VennDiagram包繪制韋恩圖示例

    這篇文章主要為大家介紹了R語言學(xué)習(xí)VennDiagram包繪制韋恩圖示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • R語言中R-squared與Adjust R-squared參數(shù)的解釋

    R語言中R-squared與Adjust R-squared參數(shù)的解釋

    這篇文章主要給大家介紹了關(guān)于R語言中R-squared與Adjust R-squared兩個(gè)參數(shù)的相關(guān)資料,文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論

莱阳市| 通州区| 吉木萨尔县| 富源县| 敖汉旗| 灯塔市| 双辽市| 萝北县| 乐安县| 满洲里市| 蒙阴县| 上饶市| 昆明市| 扬中市| 泊头市| 益阳市| 朝阳县| 桐梓县| 长春市| 新余市| 平利县| 饶河县| 东光县| 芷江| 汉寿县| 平邑县| 柘荣县| 贵定县| 奇台县| 泽州县| 建湖县| 孟津县| 来凤县| 耒阳市| 健康| 肥西县| 儋州市| 泸水县| 鄱阳县| 凤庆县| 雅安市|