R Использование lapply для сохранения графиков - PullRequest
0 голосов
/ 29 января 2019

У меня есть список объектов модели с именем allAR1.Для каждого объекта модели мне нужно использовать функцию tsdiag, чтобы создать график диагностики, а затем сохранить этот график в папке.

Я пытаюсь использовать комбинацию jpeg (), lapply и dev.off (), чтобы применить tsdiag к каждой модели, а затем сохранить полученный график в виде файла изображения.Проблема в том, что это, похоже, сохраняет только диагностический график для первой модели в списке allAR1, тогда как я хотел бы сохранить диагностические графики для всех моделей в 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 Ответ

0 голосов
/ 29 января 2019

Вот фрагмент кода, с которого можно начать:

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()
})
...