返回矩阵数量最少的列表

时间:2019-02-25 19:00:14

标签: r matrix

我给了一个子矩阵列表,并给出了一个随机矩阵:

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值。

1 个答案:

答案 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
#
# ...