我给了一个子矩阵列表,并给出了一个随机矩阵:
mat <- matrix(1:30, ncol = 5)
mat
n <- nrow(mat)
m <- ncol(mat)
r <- seq_len(min(n, m))
r.combs <- structure(choose(n, r)*choose(m, r), names = r)
print(r.combs)
sum(r.combs)
res <- structure(vector("list", length(r)), names = paste0("r", r))
for (R in r) {
tmp <- list()
R_n <- combn(n, R, simplify = FALSE)
R_m <- combn(m, R, simplify = FALSE)
for(i in seq_along(R_n)) {
for (j in seq_along(R_m)){
tmp <- c(tmp, list(mat[R_n[[i]], R_m[[j]], drop = FALSE]))
}
}
res[[R]] <- tmp
}
res
到目前为止,它返回包含矩阵列表的整个列表。我正在尝试使它的代码仅返回矩阵数量最少的列表,在这种情况下为res $ r5,但不必手动编写res $ r5,以便它可以使用不同的大小,在这种情况下最小可能是不同的r值。
答案 0 :(得分:0)
获取列表的lengths
并确定最小值。使用结果来细分您的列表
res[which.min(lengths(res))]
#$r5
#$r5[[1]]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 7 13 19 25
#[2,] 2 8 14 20 26
#[3,] 3 9 15 21 27
#[4,] 4 10 16 22 28
#[5,] 5 11 17 23 29
#
# ...