Создание диагональной матрицы с ограничениями - PullRequest
0 голосов
/ 22 июня 2019
0 1 3 5 7
1 0 3 5 7
1 3 0 5 7
1 3 5 0 7
1 3 5 7 0

Я должен сгенерировать матрицу выше, но у меня есть некоторые ограничения.Мне не разрешено использовать какие-либо встроенные функции, такие как matrix (), cbind (), rbind () (кроме length ()) или любой цикл.Я должен использовать функцию apply для этой задачи.

Функция имеет только один параметр (скажем, 7) для генерации этой матрицы выше.

Мой подход к этой проблеме заключается в том, что я создаюначальный вектор, а затем преобразовать этот начальный вектор в матрицу с помощью функции Саппли.После этого я хочу работать с этой матрицей, чтобы получить требуемый результат.

1 Ответ

0 голосов
/ 18 июля 2019

Вы правильно определили, что можете использовать sapply для решения проблемы. Пожалуйста, смотрите код ниже (быстрый и грязный):

n <- 7

gen_xs <- function(x) c(0, seq(1, x, 2))

move0 <- function(x, pos) {
  if (pos == 0)
    return(x)
  if (pos == length(x) - 1)
    return (c(x[-1], 0))
  xt <- x[x != 0]
  c(xt[1:pos], 0, xt[(pos + 1):length(xt)] )
}

t(sapply(0:((n + 1) / 2), function(x) move0(gen_xs(n), x)))

Выход:

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    3    5    7
[2,]    1    0    3    5    7
[3,]    1    3    0    5    7
[4,]    1    3    5    0    7
[5,]    1    3    5    7    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...