内存耗尽试图从大mcmc.list中提取

时间:2015-03-14 19:41:01

标签: r winbugs jags r-coda

我在尝试从大mcmc.list中提取单个变量时遇到问题:

> x <- outRJ$mcmc[,'avail_int']
Error: cannot allocate vector of size 146.8 Mb

outRJ$mcmc mcmc.list很大,实际上是442 MB(包含3个链的数据,类似960个变量,每个20000次迭代):

> object.size(outRJ$mcmc)/1024/1024
[1] 442.5508 #

但是单个变量应该只有234 kB!但它的提取似乎需要更多的记忆!

如何从大型mcmc.list中提取而不需要太多内存?

2 个答案:

答案 0 :(得分:2)

我认为这应该有效:

 x <- as.mcmc.list(lapply(outRJ$mcmc, function(x) return(x[,'avail_int',drop=FALSE])))

马特

答案 1 :(得分:2)

当前的子集代码(在函数[.mcmc.list]中)在对其进行子集化之前复制列表中的每个元素。我已经修改了coda的开发版本中的代码。与此同时,Matt的解决方法应该做,因为它也避免了冗余副本。