Для цикла для списка матриц - PullRequest
0 голосов
/ 18 апреля 2019

Предположим, у меня есть список из двух матриц и

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. Как я могу сделать еще один список из двух матриц порядка 10 на 4, используя цикл for? Заранее спасибо

1 Ответ

1 голос
/ 18 апреля 2019

Сначала уменьшите ваш расчет до:

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))

Результатом является список новых вычисленных матриц.

...