用于循环列表的矩阵

问题描述 投票:0回答:1

假设我有两个矩阵列表

t=c(1,2,3,4).  

 > y_list
    [[1]]
          [,1] [,2]
     [1,]    1   11
     [2,]    2   12
     [3,]    3   13
     [4,]    4   14
     [5,]    5   15
     [6,]    6   16
     [7,]    7   17
     [8,]    8   18
     [9,]    9   19
    [10,]   10   20

    [[2]]
          [,1] [,2]
     [1,]   21   31
     [2,]   22   32
     [3,]   23   33
     [4,]   24   34
     [5,]   25   35
     [6,]   26   36
     [7,]   27   37
     [8,]   28   38
     [9,]   29   39
    [10,]   30   40

我想做另一个10阶×4(长度为t)的矩阵的列表。我可以为单个矩阵做这件事。对于第一个矩阵

n.iter=nrow(y_list[[1]])
t.i=c(01,2,3,4)
y_list.1=matrix(NA, nrow = n.iter, ncol=length(t.i))
for( iter in 1:n.iter){
  for (t in 1:length(t.i)){
    y_list.1[iter,t]=y_list[[1]][iter,1]+y_list[[1]][iter,2]*t.i[t]
  }
}
y_list.1

> y_list.1
      [,1] [,2] [,3] [,4]
 [1,]   12   23   34   45
 [2,]   14   26   38   50
 [3,]   16   29   42   55
 [4,]   18   32   46   60
 [5,]   20   35   50   65
 [6,]   22   38   54   70
 [7,]   24   41   58   75
 [8,]   26   44   62   80
 [9,]   28   47   66   85
[10,]   30   50   70   90

我想对列表y_list中的第二个矩阵执行相同的任务。如何使用for循环执行另外两个10阶乘4的矩阵列表?提前致谢

r for-loop matrix slice
1个回答
1
投票

首先将计算减少到:

y_list <- list(matrix(1:20, 10), matrix(21:40, 10))

t.i <- c(1, 2, 3, 4)
y_list.1 <- y_list[[1]][,1] + tcrossprod(y_list[[1]][,2], t.i)
y_list.1

现在很清楚,你可以为你的矩阵列表做:

lapply(y_list, function(y) y[,1] + tcrossprod(y[,2], t.i))

结果是新计算的矩阵的列表。

© www.soinside.com 2019 - 2024. All rights reserved.