我试图通过随机抽样模拟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次。 然后我计算每个尺寸类别的分位数。