我想知道是否有一种快速的方法来初始化 R 中的矩阵列表。例如,我正在寻找一个(单行)来重现与以下相同的结果:
output_array = list()
for(i in 1:10){
output_array[i] = diag(2)
}
谢谢!
也试试这个 *apply 的包装:
replicate(10, diag(2), simplify=F)
这一个班轮应该工作
rep(list(diag(2)), 10)
如果您希望矩阵的内容有所不同,那么就像
lapply(1:10, function(x) matrix(1:x^2, x, x)
会更合适。匿名函数的内容显然会比我的例子有用一点,但是原理是一样的
建议使用复制和代表。仅供参考:不同之处在于对传递的表达式的评估。'rep' 评估它的参数作为输入,而 'replicate' 在'循环'内评估它们。
您可以通过随机数看到这一点。对于复制,数字是不同的,因为表达式'diag(rnorm(2))'被多次评估,而对于rep,它只被评估一次并且值被重复。
代表(列表(诊断(诊断(rnorm(2))),2)
[[1]]
[,1] [,2]
[1,] 1.0844 0.0000
[2,] 0.0000 -2.3457
[[2]]
[,1] [,2]
[1,] 1.0844 0.0000
[2,] 0.0000 -2.3457
复制(2,诊断(rnorm(2)))
, , 1
[,1] [,2]
[1,] 0.42912 0.00000
[2,] 0.00000 0.50606
, , 2
[,1] [,2]
[1,] -0.57474 0.00000
[2,] 0.00000 -0.54663
这对您来说可能很重要,也可能无关紧要,但会影响性能。
system.time(复制(1000,诊断(100),简化=F))
用户系统已过
0.640 0.032 0.674
system.time(rep(list(diag(100)),1000))
用户系统已过
0.072 0.036 0.111
尝试
lapply(1:10, diag, 2)
[[
在你的 for 循环中,你必须写output_array[[i]] = diag(2)
您可以使用数组:
h <- array(1:2, c(2,2,10))
h[,,2] ####
[,1] [,2]
[1,] 1 1
[2,] 2 2