фильтровать матрицу n * n с номером строки, превышающим номер столбца - PullRequest
1 голос
/ 27 июня 2019

У меня есть матрица * n, и я хочу выбрать эти данные с номером строки больше номера его столбца.

Я пробовал с циклом в R, проблема в том, что он слишком медленный.

matrix_new <- NULL

for (i in 1:nrow(matrix)) {
  for (j in 1:ncol(matrix)) {
    if (i > j) {
      matrix_new <- c(matrix_new, matrix[i,j]) 
    }
  }
}

двойной цикл кажется очень медленным в R. Есть ли эффективный способ сделать это?

Ответы [ 3 ]

3 голосов
/ 27 июня 2019

Для матриц нижнего треугольника есть базовая функция R:

m[lower.tri(m, diag = F)]

1 голос
/ 27 июня 2019

Мы можем создать логическое условие с row/col

mat[row(mat) > col(mat)]
1 голос
/ 27 июня 2019
n <- 3
mat <- matrix(letters[1:n^2], nrow = n)
mat
#      [,1] [,2] [,3]
# [1,] "a"  "d"  "g" 
# [2,] "b"  "e"  "h" 
# [3,] "c"  "f"  "i" 

mat[lower.tri(mat, diag = FALSE)]
# [1] "b" "c" "f"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...