Положите R консольный результат во внешнюю папку - PullRequest
1 голос
/ 27 сентября 2019

Я работал над моделью ARIMA, на консоли R я получил следующий результат:

ARIMA(0,1,0) with drift         : 124.185
 ARIMA(1,1,0) with drift         : 127.0279
 ARIMA(0,1,1) with drift         : 126.831
 ARIMA(0,1,0)                    : 121.4817
 ARIMA(1,1,1) with drift         : Inf

 Best model: ARIMA(0,1,0)                    

 ARIMA(2,1,2) with drift         : Inf
 ARIMA(0,1,0) with drift         : 125.6857
 ARIMA(1,1,0) with drift         : 128.5824
 ARIMA(0,1,1) with drift         : 128.4456

Но я хочу, чтобы результат автоматически сохранялся во внешней папке в форме таблицы, как показано ниже:

[![Model                    AIC
ARIMA(0,1,0) with drift 124.185
ARIMA(1,1,0) with drift 127.0279

ARIMA(0,1,1) with drift 126.831

ARIMA(0,1,0)                        Inf

Best model: ARIMA(0,1,0)                        
ARIMA(2,1,2) with drift : Inf][1]][1]

Как я могу это сделать?код, который я использовал для получения результата;

data<-read.table(file.choose(), header=T,sep="",quote="")
library(forecast)
dat<-c()
Error<- NULL
for(f in 1:11){
  for(b in 1:5){
        for (c in 1:5){
               Data1<-data[(nrow(data)-9-2*(f-1)+(b-1)):(nrow(data)-10+(b-1)),] 
      }
#This selects test sets 1,2,3,4, and 5 years beyond the training set
      Data2<-data[(nrow(data)-10+(b+c)):(nrow(data)-10+(b+c)),]
      Data3<-data[(nrow(data)-11+(b+c)):(nrow(data)-10+(b+c)),]
      #Fitting autoarima model
       fitarima<-auto.arima(Data1$abun,trace = TRUE)
      muhat<-predict(fitarima,data=Data2$abun)
      muhat$pred<-as.numeric(muhat$pred)
      for (i in nrow(Data2)){
         Error[i]<-abs(muhat$pred-Data2$abun)
          dat<-rbind(dat,Error)
      }
       }
  }
}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

То, что мы собираемся сделать, это сохранить выходные данные, которые будут напечатаны на консоли, в текстовый файл, а затем прочитать текстовые файлы в R. Мы собираемся использовать функцию sink(), чтобы сохранить выходные данные на консоли,Поскольку выходные данные печатаются на каждой итерации, нам нужно включить sink() в цикл for.Вы можете видеть в цикле for ниже, что я сделал два вызова sink() вокруг вызова auto.arima().Это потому, что это функция, которая печатает вывод на консоль.Я использовал paste0() для создания нового имени для вывода на каждой итерации.Вывод сохраняется в виде текстового файла в формате «output 1.txt».

library(forecast)
library(grid)
library(gridExtra)

dat<-c()
Error<- NULL
x <- 1
for(f in 1:11){
  for(b in 1:5){
    for (c in 1:5){
      Data1<-data[(nrow(data)-9-2*(f-1)+(b-1)):(nrow(data)-10+(b-1)),] 
    }
    #This selects test sets 1,2,3,4, and 5 years beyond the training set
    Data2<-data[(nrow(data)-10+(b+c)):(nrow(data)-10+(b+c)),]
    Data3<-data[(nrow(data)-11+(b+c)):(nrow(data)-10+(b+c)),]
    #Fitting autoarima model
    sink(paste0("output", " ", x, ".txt"))
    fitarima<-auto.arima(Data1$abun,trace = TRUE)
    sink()
    x <- x + 1
    muhat<-predict(fitarima,data=Data2$abun)
    muhat$pred<-as.numeric(muhat$pred)
    for (i in nrow(Data2)){
      Error[i]<-abs(muhat$pred-Data2$abun)
      dat<-rbind(dat,Error)
    }
  }
}

После завершения цикла for мы импортируем файлы в R. Мы получаем списокфайлы с использованием list.files(), который ищет в рабочем каталоге файлы с расширением «.txt».Мы используем lapply() на read.table(), чтобы создать список фреймов данных, содержащих модели аримы для каждой итерации.Затем мы просто перебираем каждый объект в списке и создаем графики фрейма данных, а затем сохраняем его.Это то же самое, что и раньше, я только что создал цикл, чтобы сделать это для каждого кадра данных.Наилучшая модель сохраняется в последнем ряду каждого кадра данных, поэтому ее удобно извлечь, используя nrow(mod).

files <- list.files(getwd(), pattern = ".txt")
arima_mods <- lapply(files, read.table, sep = ":", header = FALSE)

j <- 1

for (mod in arima_mods) {

  df <- mod[-nrow(mod), , drop = FALSE]

  best <- mod[nrow(mod), , drop = FALSE]

  colnames(df) <- c('Model', 'AIC')

  hj <-  matrix(c(0, 0.5), ncol=2, nrow=nrow(df), byrow=TRUE)

  x <-  matrix(c(0, 0.5), ncol=2, nrow=nrow(df), byrow=TRUE)

  mytheme <- ttheme_default(core = list(fg_params = list(hjust=hj,
                                                         x=x, 
                                                         fontsize=10)),
                            colhead = list(fg_params = list(fontsize=10, 
                                                            fontface="bold"))
  )


  mod_num <- paste0('arima_fit', j, ".pdf")

  pdf(mod_num, height=6, width=8.5, onefile = TRUE)
  grid.table(df, theme = mytheme, rows = NULL)
  pushViewport(viewport(y=.25,height=.5))
  grid.table(best, rows = NULL, cols = NULL, theme = mytheme)
  dev.off()

  j <- j + 1
}

Вот изображение одной из таблиц tables

0 голосов
/ 27 сентября 2019

Вы можете взять вывод из консоли и создать фрейм данных, используя read.table().Затем вы можете использовать пакет gridExtra для создания таблицы данных.Затем используйте `` `pdf () для экспорта таблицы в pdf.

library(grid)
library(gridExtra)

rawdata <- 'ARIMA(0,1,0) with drift         : 124.185
 ARIMA(1,1,0) with drift         : 127.0279
 ARIMA(0,1,1) with drift         : 126.831
 ARIMA(0,1,0)                    : 121.4817
 ARIMA(1,1,1) with drift         : Inf

 Best model: ARIMA(0,1,0)                    

 ARIMA(2,1,2) with drift         : Inf
 ARIMA(0,1,0) with drift         : 125.6857
 ARIMA(1,1,0) with drift         : 128.5824
 ARIMA(0,1,1) with drift         : 128.4456'

df <- read.table(text = rawdata, header = F, sep = ":", col.names = c('Model', 'AIC'))

best <- df[6,]

df <- df[-6,]

hj <-  matrix(c(0, 0.5), ncol=2, nrow=nrow(df), byrow=TRUE)

x <-  matrix(c(0, 0.5), ncol=2, nrow=nrow(df), byrow=TRUE)

mytheme <- ttheme_default(core = list(fg_params = list(hjust=0,
                                                       x=0.1, 
                                                       fontsize=10)),
                          colhead = list(fg_params = list(fontsize=10, 
                                                          fontface="bold"))
)


pdf("arima_models.pdf", height=6, width=8.5, onefile = TRUE)
grid.table(df, theme = mytheme, rows = NULL)
pushViewport(viewport(y=.25,height=.5))
grid.table(best, rows = NULL, cols = NULL, theme = mytheme)
dev.off()

Вот изображение с выхода enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...