如何在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)

您可以稍微更改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

最新更新