我在尝试从大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!但它的提取似乎需要更多的记忆!
答案 0 :(得分:2)
我认为这应该有效:
x <- as.mcmc.list(lapply(outRJ$mcmc, function(x) return(x[,'avail_int',drop=FALSE])))
马特
答案 1 :(得分:2)
当前的子集代码(在函数[.mcmc.list]中)在对其进行子集化之前复制列表中的每个元素。我已经修改了coda的开发版本中的代码。与此同时,Matt的解决方法应该做,因为它也避免了冗余副本。