R 如何操作列表中的矩阵?
我是一个新的R用户,现在我使用R 如何操作列表中的矩阵?,r,list,matrix,R,List,Matrix,我是一个新的R用户,现在我使用mapply命令在矩阵之间进行操作;我原来的问题有两个列表,每个列表有30个矩阵;然而,为了更好地解释我的问题,我将只使用6个矩阵 Phi1<-matrix(1:9, ncol = 3) Phi2<-matrix(10:18, ncol = 3) Phi3<-matrix(0:-8, ncol = 3) mat <- matrix(1:24, ncol = 3) p <- 3 m <- 5 mat_df <- as.d
mapply
命令在矩阵之间进行操作;我原来的问题有两个列表,每个列表有30个矩阵;然而,为了更好地解释我的问题,我将只使用6个矩阵
Phi1<-matrix(1:9, ncol = 3)
Phi2<-matrix(10:18, ncol = 3)
Phi3<-matrix(0:-8, ncol = 3)
mat <- matrix(1:24, ncol = 3)
p <- 3
m <- 5
mat_df <- as.data.frame(mat)
mat_lag <- map(1:p, ~ mutate_all(mat_df, lag, .x)) %>%
map(drop_na) %>%
map(~ slice(.x, (nrow(.x) - m + 1):nrow(.x)))
mat_lag %>%
map(as.matrix)
PHI<-list(Phi1, Phi2, Phi3)
问题是,在我原来的问题中,我有30个矩阵,我不想手动提取列表中的每个元素。通过上面的命令,我得到了我想要的结果,如下所示:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 23 147 319 27 159 339 31 171 359
[2,] 34 161 336 39 174 357 44 187 378
[3,] 45 175 353 51 189 375 57 203 397
[4,] 56 189 370 63 204 393 70 219 416
[5,] 67 203 387 75 219 411 83 235 435
但是,我不知道如何将此命令应用于列表,这样我的最终结果将是一个包含30个大小为5*9的矩阵的列表,这不是最优雅的(对于30个矩阵来说可能会很慢):
OP示例的结果:
mapply(function(x, y) x*y, t(Phi1), mat_lag[[1]])
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 44 133 6 55 152 9 66 171
[2,] 4 48 140 8 60 160 12 72 180
[3,] 5 52 147 10 65 168 15 78 189
[4,] 6 56 154 12 70 176 18 84 198
[5,] 7 60 161 14 75 184 21 90 207
是否始终要使用
Phi1
或将PHI[[*]]
映射到mat\u lag[[*]]
?否,我要使用列表PHI。。。我们的想法是通过mat_lag[[1]]
将t(Phi1)
,t(Phi2)
通过mat_lag[[2]]
,t(Phi3)
通过mat_lag[[3]])
是的,但您想如何使用它呢。检查我的答案中的注释代码,并让我知道这是否是您所需要的。
lapply(1:length(mat_lag),function(index)
mapply(function(x, y) x*y, t(PHI[[index]]), mat_lag[[index]]))
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 44 133 6 55 152 9 66 171
[2,] 4 48 140 8 60 160 12 72 180
[3,] 5 52 147 10 65 168 15 78 189
[4,] 6 56 154 12 70 176 18 84 198
[5,] 7 60 161 14 75 184 21 90 207
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 20 130 288 22 140 306 24 150 324
[2,] 30 143 304 33 154 323 36 165 342
[3,] 40 156 320 44 168 340 48 180 360
[4,] 50 169 336 55 182 357 60 195 378
[5,] 60 182 352 66 196 374 72 210 396
[[3]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 0 -27 -102 -1 -36 -119 -2 -45 -136
[2,] 0 -30 -108 -2 -40 -126 -4 -50 -144
[3,] 0 -33 -114 -3 -44 -133 -6 -55 -152
[4,] 0 -36 -120 -4 -48 -140 -8 -60 -160
[5,] 0 -39 -126 -5 -52 -147 -10 -65 -168
mapply(function(x, y) x*y, t(Phi1), mat_lag[[1]])
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 3 44 133 6 55 152 9 66 171
[2,] 4 48 140 8 60 160 12 72 180
[3,] 5 52 147 10 65 168 15 78 189
[4,] 6 56 154 12 70 176 18 84 198
[5,] 7 60 161 14 75 184 21 90 207