矩阵列表的For循环

时间:2019-04-18 02:53:42

标签: r for-loop matrix slice

假设我有两个矩阵的列表,并且

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的矩阵列表? 预先感谢

1 个答案:

答案 0 :(得分: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))

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