矩阵列表的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,我已经编辑了问题。你能检查一下,让我知道是否可以做到。谢谢你的帮助:)我删除了重复的问题。谢谢你的帮助:)我删除了重复的问题。