99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R內(nèi)存管理與垃圾清理
R內(nèi)存管理與垃圾清理
2017-06-11
收藏

R內(nèi)存管理與垃圾清理

1.內(nèi)存查看
memory.limit():查看內(nèi)存大小
memory.limit(n):申請(qǐng)內(nèi)存大小
memory.size(NA):查看內(nèi)存大小
memory.size(T):查看已分配的內(nèi)存
memory.size(F):查看已使用的內(nèi)存
2.內(nèi)存申請(qǐng)
在Windows開(kāi)始菜單運(yùn)行:
Rgui -max-mem-size 8GB  
與在R GUI中執(zhí)行:
memory.limit(8000)
都能申請(qǐng)8GB使用內(nèi)存
3.垃圾清除
rm(x):從workplace中刪除變量/文件x
gc():清除內(nèi)存垃圾
rm(list=ls()):清除workplace中所有變量
4.提升R的性能和突破內(nèi)存限制的技巧
4.1性能提升的方法
4.1.1 系統(tǒng)升級(jí)
    升級(jí)硬件
    使用64位操作系統(tǒng)
    利用GPU
    租用云計(jì)算服務(wù)器
4.1.2 開(kāi)發(fā)層面的優(yōu)化
    算法降低算法復(fù)雜度
    調(diào)用C/C++或者Fortran關(guān)鍵的、耗時(shí)的計(jì)算步驟
    緩沖技術(shù)減少重復(fù)計(jì)算
4.1.3 使用層面的優(yōu)化
    充分利用R的內(nèi)存機(jī)制——R的基礎(chǔ)優(yōu)化
    增強(qiáng)R的矩陣運(yùn)算——加速BLAS
    并行計(jì)算
    大規(guī)模數(shù)據(jù)的處理——圖片內(nèi)存限制
    使用Revolution R Enterprise(RRE)
4.2 充分利用R的內(nèi)部機(jī)制優(yōu)化性能
4.2.1向量化
向量化的代碼,不要用循環(huán)!
    利用矩陣運(yùn)算
    利用內(nèi)置的向量化函數(shù),比如exp、sin、rowMeans、rowSums、colSums、ifelse等
    利用Vectorize函數(shù)將非向量化的函數(shù)改裝為向量化的函數(shù)
    *apply函數(shù)族:apply、lapply、sapply、tapply、mapply等

    plyr和dplyr包Rstudio發(fā)布的data wrangling cheat sheet
##利用矩陣運(yùn)算
n <- 100000
x1 <- 1:n
x2 <- 1:n
y <- vector()
system.time(
    for(i in 1:n){y[i] <- x1[i] + x2[i]}
)
system.time(y <- x1 + x2)

## 利用向量化運(yùn)算
## 內(nèi)置的向量化函數(shù)
v <- 1:100000
result <- rep(1:100000)
system.time(
    for(i in 1:100000){result[i] <- sin(v[i])}
)
system.time(result <- sin(v))

## 利用rowMeans、rowSums、colSums、colMeans等函數(shù)對(duì)矩陣或數(shù)據(jù)庫(kù)做整體處理
colSums(iris[,1:4])
利用R內(nèi)置的向量化函數(shù),自定義向量化函數(shù),只要在函數(shù)定義時(shí)每個(gè)運(yùn)算是向量化的。但是在函數(shù)定義時(shí)用了邏輯判斷語(yǔ)句,就會(huì)破壞的向量化特征。

func <- function(x){
    if(x %% 2 == 0){
        ret <- TRUE
    }else{
        ret <- FALSE}
    return(ret)
}
func(34)
func(c(1,2,3,4))
## Warning message:
## In if (x%%2 == 0) { :
##   the condition has length > 1 and only the first element will be used
## 在函數(shù)的定義中有if語(yǔ)句,不能接受向量作為判斷的條件,否則判斷第一個(gè)元素。

## 利用ifelse函數(shù)做向量化的判斷
myfunc <- function(x){
    ifelse(x %% 2 == 0,TRUE,FALSE)
}
myfunc(c(1,2,3,4))

##利用Vectorize函數(shù)將非向量化的函數(shù)改裝為向量化的函數(shù)
funcv <- Vectorize(func)
funcv(c(1,2,3,4))

##利用sapply函數(shù)向量化運(yùn)算
sapply(c(1,2,3,4),func)
4.2.2預(yù)先給對(duì)象分配內(nèi)存
R為解釋性語(yǔ)言,也是動(dòng)態(tài)語(yǔ)言,如果不事先指定對(duì)象的類型和長(zhǎng)度,在運(yùn)算過(guò)程會(huì)動(dòng)態(tài)分配內(nèi)存,提高靈活性,但降低了效率。
盡量減少cbind、rbind的使用
## 求出10000個(gè)斐波那契數(shù)
x <- c(1,1)
i <- 2
system.time(
    while(i<10000){
        new <- x[i] + x[i-1]
        x <- cbind(x,new)
        i <- i + 1
    }
)

## 指定類型和長(zhǎng)度
x <- vector(mode="numeric",100000)
x[1] <- 1
x[2] <- 1
system.time(
    while(i<10000){
        i <- i + 1
        x[i] <- x[i-1] + x[i-2]
    }
)

4.2.3避免內(nèi)存拷貝

假設(shè)我們有許多彼此不相關(guān)的向量,但因?yàn)橐恍┢渌脑?,我們希望將每個(gè)向量的第三個(gè)元素設(shè)為8,既然它們是互不相關(guān)的,甚至可能具有不同的長(zhǎng)度,我們也許會(huì)考慮將它們放在一個(gè)列表中:
m <- 5000
n <- 1000
z <- list()
for(i in 1:m) z[[i]] <- sample(1:10, n, replace = T)
system.time(for(i in 1:m) z[[i]][3] <- 8)

## 把這些向量一起放到矩陣中
z <- matrix(sample(1:10, m * n, replace = T),nrow = m)
system.time(z[,3] <- 8)

4.2.4刪除臨時(shí)對(duì)象和不再用的對(duì)象
        rm()刪除對(duì)象
        rm(object)刪除指定對(duì)象,rm(list = ls())可以刪除內(nèi)存中的所有對(duì)象
        gc()內(nèi)存垃圾回收
        使用rm(object)刪除變量,要使用gc()做垃圾回收,否則內(nèi)存是不會(huì)自動(dòng)釋放的。invisible(gc())不顯示垃圾回收的結(jié)果

4.2.5分析內(nèi)存的函數(shù)
        ls()列出特定環(huán)境中的對(duì)象
        object.size()返回R對(duì)象的大?。ń频模?br />         memory.profile()分析cons單元的使用情況
        memory.size()監(jiān)測(cè)全部?jī)?nèi)存的使用情況(僅Windows下可用)
        memory.size(max=T)返回歷史占用過(guò)的最大內(nèi)存;memory.size(max=F)返回目前占用的內(nèi)存。未做垃圾清理時(shí),已使用內(nèi)存和已分配內(nèi)存同步增加,但在垃圾清理后rm(list=ls());gc(),已使用內(nèi)存會(huì)減少,而已分配給R的內(nèi)存不會(huì)改變。
        memory.limit()系統(tǒng)可分配的內(nèi)存上限(僅Windows下可用)
        memory.limit(newLimit)更改到一個(gè)新的上限。 注意,在32位的R中,封頂上限為4G,你無(wú)法在一個(gè)程序上使用超過(guò)4G (數(shù)位上限)。這種時(shí)候,可以考慮使用64位的版本。

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }