考虑 lapply 建立一个返回项目列表:
matrix_list <- lapply(1:3, function(i) {
n <- 5^i
m <- matrix(data=0, nrow=n, ncol=n)
for (j in n:1){
for (k in 1:i){
m[j,k]=j+k
}
}
return(m)
})
或者,使用sapply 传递多个向量来构建矩阵列表,这通常与嵌套的for 循环相对应。要添加到零矩阵,请使用cbind:
matrix_list2 <- lapply(1:3, function(i) {
n <- 5^i
m <- matrix(data=0, nrow=n, ncol=n-i)
s <- as.matrix(sapply(1:n, `+`, 1:i))
if (i == 1) m <- cbind(s, m)
else m <- cbind(t(s), m)
})
或者更紧凑,使用outer,在两个for循环向量的边距上运行:
matrix_list3 <- lapply(1:3, function(i) {
n = 5^i
m <- matrix(data=0, nrow=n, ncol=n-i)
m <- cbind(outer(1:n, 1:i, `+`), m)
})
all.equal(matrix_list, matrix_list2)
# [1] TRUE
all.equal(matrix_list, matrix_list3)
# [1] TRUE