提高R代码的随机采样性能

时间:2015-10-14 15:30:41

标签: r performance out-of-memory random-sample

我试图通过随机抽样模拟R中的分布来为数据集生成置信区间。但是,我这样做会导致R内存不足。我对R不是很有经验,并且很想知道是否有一种方法可以优化它以便在R中运行良好,或者如果像python这样的另一种语言会更好(我只知道一些R和python)。代码如下。

当我运行时,我收到错误'错误:无法分配大小为359.9 Mb的矢量'。

如果不是使用sapply()而是在k = 1:9000的for循环中顺序运行模拟,那么效率会更高吗?因此R不必将所有模拟存储在其内存中直到他们全部完成?

提前致谢

#import probability distribution: 
ps <-read.table("Asianpig_probability_distribution.txt", header = TRUE, check.names = FALSE)

#what ps looks like:
ps

0.1     0.2       0.3       0.4       0.5       0.6       0.7       0.8      0.9   1.0
1 0.5399651 0.24848 0.1235064 0.0553278 0.0226341 0.0075721 0.0020886 0.0003944 2.94e-05 2e-06
n <- 1e4

set.seed(42)

#run the simulations 
sims <- sapply(1:9000, 
function(k) 
rowSums(
replicate(k, sample(x=(1:10)/10, size=n, replace=TRUE, prob=ps))) / k)

#Then calculate quantile range on output of simulations:
quants <- apply(sims, 2, quantile, probs = c(0.025, 0.975))

Encase上下文有助于可读性,代码模拟具有1至9000个SNP的基因的平均得分。基于概率分布(ps),每个SNP被随机分配0-1之间的分数。对于每种大小在1至9000个SNP之间的基因,这进行n次。 然后我计算每个尺寸类别的分位数。

0 个答案:

没有答案