Есть ли другой способ написать следующую функцию без для l oop в R? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь написать следующую функцию без for l oop. Обратите внимание, что я пытаюсь повторить функцию diag().

selfdiag <- function(a) {
  j <- c()
  for (i in 1:ncol(a)) {
    j[i] <- a[i, i]
  }
  return(j)
}

. Учтите, что:

mat <- matrix(rnorm(4), ncol = 2)

Функция selfdiag() должна создать тот же результат, что и diag(). Спасибо за любую помощь в этом.

1 Ответ

1 голос
/ 22 февраля 2020

Вы можете создать фрейм данных с индексами строк и столбцов для диагонали и использовать его для извлечения диагональных значений из матрицы.

mat <- matrix(rnorm(4), ncol = 2)

Способ сделать это diag() -

diag(mat)
[1] -0.5004046 -0.8785558

Другой способ сделать это -

rows_cols <- data.frame(rows = c(1:ncol(mat)), cols = c(1:ncol(mat)))
mat2 <- mat[as.matrix(rows_cols)]
mat2
[1] -0.5004046 -0.8785558

Надеюсь, это поможет!

...