Как связать список списка в R

#r

#r

Вопрос:

У меня есть данные временных рядов. Он содержит 4 одномерные случайные величины за 4 года. После того, как я подобрал ARIMA модель, я попытался связать список из 4 переменных по 4 года в столбцах. Столбец для каждой переменной за ее 4 года. Мой код работает хорошо, но он очень длинный. Я хотел бы упростить свой код, поскольку мне нужно повторить эти шаги для других наборов данных.

 library(ggplot2)
library(forecast)
library(tseries)
library(zoo)
library(dplyr)
library(data.table)
data("EuStockMarkets")
dat <- EuStockMarkets
res <- lapply(split(as.zoo(EuStockMarkets), as.integer(time(EuStockMarkets))), as.ts)
datNew <- lapply(5:8, function(i) ts(res[[i]]))
dat.log <- lapply(1:4, function(i) log(datNew[[i]]))
dat.diff <- lapply(1:4, function(i)diff(dat.log[[i]]))
Logreturns <- dat.diff
result <- unlist(lapply(seq_along(Logreturns), function(i) 
  lapply(seq_len(ncol(Logreturns[[i]])), function(j)
    auto.arima(Logreturns[[i]][,j]))), recursive = FALSE)
Resd <- lapply(1:16, function(i) result[[i]]$residuals)

## cbind the data
ResCb1 <- cbind(Resd[[1]], Resd[[2]],Resd[[3]], Resd[[4]])
ResCb2 <- cbind(Resd[[5]], Resd[[6]],Resd[[7]], Resd[[8]])
ResCb3 <- cbind(Resd[[9]], Resd[[10]],Resd[[11]], Resd[[12]])
ResCb4 <- cbind(Resd[[13]], Resd[[14]],Resd[[15]], Resd[[16]])
Resi <- rbind(ResCb1, ResCb2, ResCb3, ResCb4)
  

Ответ №1:

Вы могли result бы немного изменить шаг, чтобы получить данные в требуемой форме :

 Resi_1 <- do.call(rbind, lapply(seq_along(Logreturns), function(i) 
                  sapply(seq_len(ncol(Logreturns[[i]])), function(j)
                         auto.arima(Logreturns[[i]][,j])$residuals)))

head(Resi_1)

#             [,1]          [,2]         [,3]          [,4]
#[1,] -0.006382935 -0.0072788740 -0.014522115  0.0033533708
#[2,] -0.010862950 -0.0111559902 -0.017582871 -0.0104631445
#[3,]  0.010944002 -0.0007869286 -0.006886715 -0.0006927197
#[4,] -0.008772532 -0.0007869286  0.000000000 -0.0006600991
#[5,] -0.004951663 -0.0070833375  0.002495289 -0.0005948590
#[6,]  0.001921861  0.0068779897  0.008395646 -0.0052699842