矩阵列表的For循环

矩阵列表的For循环,r,for-loop,matrix,slice,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

假设我有一个由两个矩阵和

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_列表中的第二个矩阵执行相同的任务。如何使用for循环生成两个10×4阶矩阵的另一个列表?
提前感谢

首先将您的计算减少到:

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

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

首先将计算减少到:

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

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

请(a)张贴(复制/粘贴!)可复制的数据样本。模拟数据如
set.seed(123);M=复制(n=5,矩阵(rnorm(6),nrow=3))
可以,或者如果您已经有合适的
M
给我们
dput(M)
,这将是可复制粘贴的。在你的问题中编辑它,而不是评论。(b) 向一个矩阵显示用于执行此操作的代码。这将有助于解释你想做什么。我感到困惑的是,你从5个矩阵开始,每个矩阵有2列,不知怎么地你使用了4个
t
值。4个
t
值如何映射到5个矩阵?是否
t[1]
仅用于
M[[1]]
?(如果是这样,我们如何处理
M[[5]]
,再次使用
t[1]
)或者您希望结果中的20个矩阵都使用
t
M
?还是别的?你好,格雷戈,谢谢你的及时回复。对于每个矩阵,将使用每个t值。与第一个矩阵一样,第一个条目i,e(1,1)应该是M[[1]][1,1]+M[[1][1,2]*t[1],第一行的第二个条目i,e(1,2)应该是M[[1][1,1]+M[[1]]1,2]*t[2],第二行第一个条目应该是M[[1][2,1]+M[[1]]2]*t[2]。这将继续适用于所有矩阵。因此,最后我将有一个5个矩阵的列表,每个矩阵的维数都是3乘4。我认为一个完整的工作示例会很好——我仍然不明白。当您使用可复制示例编辑问题时,请在
M
中显示第一个矩阵的预期结果。您好,Gregor,我已经编辑了问题。你能检查一下,让我知道是否可以做到。感谢(a)发布(复制/粘贴!)可复制的数据样本。模拟数据如
set.seed(123);M=复制(n=5,矩阵(rnorm(6),nrow=3))
可以,或者如果您已经有合适的
M
给我们
dput(M)
,这将是可复制粘贴的。在你的问题中编辑它,而不是评论。(b) 向一个矩阵显示用于执行此操作的代码。这将有助于解释你想做什么。我感到困惑的是,你从5个矩阵开始,每个矩阵有2列,不知怎么地你使用了4个
t
值。4个
t
值如何映射到5个矩阵?是否
t[1]
仅用于
M[[1]]
?(如果是这样,我们如何处理
M[[5]]
,再次使用
t[1]
)或者您希望结果中的20个矩阵都使用
t
M
?还是别的?你好,格雷戈,谢谢你的及时回复。对于每个矩阵,将使用每个t值。与第一个矩阵一样,第一个条目i,e(1,1)应该是M[[1]][1,1]+M[[1][1,2]*t[1],第一行的第二个条目i,e(1,2)应该是M[[1][1,1]+M[[1]]1,2]*t[2],第二行第一个条目应该是M[[1][2,1]+M[[1]]2]*t[2]。这将继续适用于所有矩阵。因此,最后我将有一个5个矩阵的列表,每个矩阵的维数都是3乘4。我认为一个完整的工作示例会很好——我仍然不明白。当您使用可复制示例编辑问题时,请在
M
中显示第一个矩阵的预期结果。您好,Gregor,我已经编辑了问题。你能检查一下,让我知道是否可以做到。谢谢你的帮助:)我删除了重复的问题。谢谢你的帮助:)我删除了重复的问题。