簡體   English   中英

單向量函數R的內存耗盡

[英]Memory exhaustion for single vector function R

我想在長度為40k的向量上運行一個函數(即使用DescTools計算基尼系數 )。

set.seed(42)
my_vec = sample(1:100000, 40000, replace = T)

#the function to get the Gini with confidence interval
DescTools::Gini(my_vec, conf.level = 0.99)

計算置信區間(僅計算Gini系數而沒有置信區間可立即完美運行)會導致我的機器出現一些內存問題(64位R版本,8 GB RAM)並返回

Error: vector memory exhausted (limit reached?)

為了解決這個問題,我研究了以下選項:

  • 增加R可用的內存,但在Mac上找不到該選項( memory.limit()似乎僅適用於Windows)
  • 使用parallel R庫並行運行函數

我在為后者苦苦掙扎,因為該函數不需要對多列進行任何迭代。 因此,我不希望並行化能夠正常工作:

mclapply(my_vec, function(x) Gini(x, unbiased = T, conf.level = 0.99), mc.cores = 3) #does not work

有沒有一種方法可以避免內存問題,如果並行化是一種解決方案,那么如何為一個向量實現它呢? 非常感謝!

您可以在RevoScaleR中實現Lorenz曲線和Gini索引的實現 ,無論矢量大小如何,都可以按塊獲取計算。

set.seed(42)
my_vec = data.frame(V1 = sample(1:100000, 40000, replace = T))

# Compute Lorenz
lorenzOut <- rxLorenz(orderVarName = "V1", data = my_vec)

# Compute the Gini Coefficient
giniCoef <- rxGini(lorenzOut)
giniCoef
0.335597

CI:

boot <- replicate(1000, rxGini(rxLorenz(orderVarName = "V1", 
                                data = my_vec[sample.int(nrow(my_vec), nrow(my_vec), replace = TRUE), , drop = FALSE], reportProgress = 0)))

summary(boot)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.3315  0.3347  0.3356  0.3356  0.3364  0.3396 

quantile(boot, probs = c(0.005, 0.995))
     0.5%     99.5% 
0.3324822 0.3389219 

暫無
暫無

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

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