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

我是一个新的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.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