Возврат списка с наименьшим количеством матриц - PullRequest
0 голосов
/ 25 февраля 2019

Я составил список списков подматриц, учитывая случайную матрицу:

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 голосов
/ 25 февраля 2019

Получите 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
#
# ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...