在R中使用lapply保存绘图结果

4
我有一个名为allAR1的模型对象列表。对于每个模型对象,我需要使用tsdiag函数生成诊断图并将该图保存到文件夹中。
我尝试使用jpeg(),lapply和dev.off()的组合来将tsdiag应用于每个模型,然后将结果图保存为图像文件。问题在于,这似乎只保存了allAR1列表中第一个模型的诊断图,而我希望保存所有模型的诊断图。
以下是我的代码和可重现的示例:
library(tseries)

data(nino)

nino = list(nino3 = nino3, nino4 = nino3.4)

ar <- function(dat, idx, order, m) {

  paes = arima(dat, order = order)
  bic = paes$loglik + m*log(length(dat))
  res = residuals(paes)

  all = list(paes = paes, 
             bic = bic, 
             res = res)

  assign(idx, all)

  return(all)

}


allAR1 = mapply(ar, dat = nino, idx = names(nino), 
                MoreArgs = list(order = c(1,0,0), m = 1), 
                SIMPLIFY = F)

allpaes = lapply(allpaes, function(x) x$paes)
jpeg(sprintf("C:/Users/owner/Documents/%s.jpeg", names(nino)))
lapply(allAR1, tsdiag, gof.lag = 1000)
dev.off()

我也尝试了lapply(allAR1, function(x) {jpeg(sprintf("C:/Users/owner/Documents/%s.jpeg", names(nino))); tsdiag(x$paes, 1000); dev.off()})。然而,这给我带来了与上面代码相同的结果。
如果能得到帮助,将不胜感激,因为我不确定哪里出了问题。
1个回答

2
以下是一个代码片段,可以帮助你开始:

这里是一个代码片段,可以帮助你开始:

library(tseries)
#from tsdiag help page
fit <- arima(lh, c(1,0,0))
#make an arbitrary list of model fits
models <- list(m1 = fit, m2 = fit)

lapply(1:length(models), function(x){
  jpeg(paste0(names(models)[x], ".jpeg"))
  tsdiag(models[[x]])
  dev.off()
})

谢谢,这个方法可行。但是我仍然不确定为什么 jpeg(paste0(names(models), ".jpeg")); lapply(models, tsdiag, gof.lag = 1000); dev.off() 只保存了 m1 的诊断图而没有保存 m2 的。我错过了什么吗? - user51462
据我所知,JPEG 没有多页面的概念,您的代码中也没有迭代不同图形的内容。这里有相关的问题:https://dev59.com/wlfUa4cB1Zd3GeqPLcsz - Chase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接