如何在R中保存尾波对象
我不确定如何在R中保存coda(mcmc.list)对象。其他人也提出了类似的问题,但我发现给出的答案不是特别清楚。理想情况下,我希望将coda对象保存为R.data文件或文本文件(例如csv),这样我就可以重新导入它并分析JAGS链,而无需重新运行模型(在我的计算机上大约需要30分钟)。现在,我的尾波对象“coda.samples”如下所示:如何在R中保存尾波对象,r,save,mcmc,jags,runjags,R,Save,Mcmc,Jags,Runjags,我不确定如何在R中保存coda(mcmc.list)对象。其他人也提出了类似的问题,但我发现给出的答案不是特别清楚。理想情况下,我希望将coda对象保存为R.data文件或文本文件(例如csv),这样我就可以重新导入它并分析JAGS链,而无需重新运行模型(在我的计算机上大约需要30分钟)。现在,我的尾波对象“coda.samples”如下所示: str(coda.samples) List of 3 $ : mcmc [1:3334, 1:1094] 0.904 0.977 0.927 0.9
str(coda.samples)
List of 3
$ : mcmc [1:3334, 1:1094] 0.904 0.977 0.927 0.945 0.905 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3334] "2001" "2011" "2021" "2031" ...
.. ..$ : chr [1:1094] "alpha[1,1]" "alpha[2,1]" "alpha[1,2]" "alpha[2,2]" ...
..- attr(*, "mcpar")= num [1:3] 2001 35331 10
$ : mcmc [1:3334, 1:1094] 0.824 0.866 0.839 0.832 1.032 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3334] "2001" "2011" "2021" "2031" ...
.. ..$ : chr [1:1094] "alpha[1,1]" "alpha[2,1]" "alpha[1,2]" "alpha[2,2]" ...
..- attr(*, "mcpar")= num [1:3] 2001 35331 10
$ : mcmc [1:3334, 1:1094] 0.956 0.944 0.895 0.809 1.064 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:3334] "2001" "2011" "2021" "2031" ...
.. ..$ : chr [1:1094] "alpha[1,1]" "alpha[2,1]" "alpha[1,2]" "alpha[2,2]" ...
..- attr(*, "mcpar")= num [1:3] 2001 35331 10
- attr(*, "class")= chr "mcmc.list"
如您所见,这是一个由三个矩阵组成的列表,其中包含1094个参数的3334个估计值(即,长度为3334的三条链)。我想存储这个尾波对象,这样我就可以将它回调到R中,而不必每次都重新运行模型。我还想保留这样一个事实,即有三个唯一的链。这是我从
MCMCglmm
保存链时使用的脚本。将对象
替换为coda对象的名称(例如,在MCMCGCLMM
中制作的模型名称),并将文件路径
替换为合适的保存目标
save(OBJECT, file= "FILEPATH")
model = load("FILEPATH")
便利提示:我还使用if
和else
将我的模型包装在交换机中-这可以组合起来,形成一个有用的系统,运行并保存脚本,或者加载以前的运行(将runmod
设置为y
或n
,然后选择loaddate
以获取正确的文件。例如:
runmod = "y"
loaddate = "2017-01-12"
NITT = 130000
BURN = 30000
THIN = 100
# Model
if(runmod=="n"){
model4.1 = MCMCglmm(cbind(BWT_F, BWT_M, TAR_F, TAR_M) ~ trait-1,
random = ~us(trait):animal + us(trait):BYEAR + us(trait):MOTHER,
rcov = ~us(trait):units,
family = rep("gaussian", times = 4),
pedigree = Ped,
data = Data,
burnin = BURN,
nitt = NITT,
thin = THIN,
prior = prior4.1)
save(model4.1, file=paste0("FILEPATH......",NITT,"_",Sys.Date(),".rda"))
}else{
model41 = load(paste0("FILEPATH......",NITT,"_",loaddate,".rda"))
}
查看
?save
或?saveRDS
。任何R对象都可以使用保存(例如,coda.samples,file='my.coda.samples.rda')
。然后可以使用加载('my.coda.samples.rda')
将其加载回R。你完全正确。我想得太多了。使用命令保存(coda.samples,file=“coda.samples.RData”)
保存coda对象。然后使用load(coda.samples.RData)
加载它,效果非常好。