[英]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?)
為了解決這個問題,我研究了以下選項:
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.