Вот одно решение (порядок столбцов отличается, но идея верна):
n = 3
sweep(replicate(n, 1:n), 2, 1:n, "+") %% n + 1
[,1] [,2] [,3]
[1,] 3 1 2
[2,] 1 2 3
[3,] 2 3 1
Объяснение :
replicate
сначала создаст матрицу, в которой каждая строкаis 1:n
:
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 2 2
[3,] 3 3 3
Затем я использую функцию sweep
для добавления 1
к столбцу 1, 2
к столбцу 2, 3
к столбцу 3:
[,1] [,2] [,3]
[1,] 2 3 4
[2,] 3 4 5
[3,] 4 5 6
В этот момент вы можете сделать модуль по матрице, а затем добавить 1
, чтобы получить нужную матрицу.
Редактировать: Если вам нужно иметь тот же порядок столбцов, что и выше, может сделать
(sweep(replicate(n, 1:n), 2, 1:n, "+") + 1) %% n + 1