Я не уверен, есть ли пакет, в том числе спиральная матричная конструкция, поэтому я просто предоставляю базовое решение R
SpiralMatrix <- function(n) {
M <- matrix(nrow = n,ncol = n);
# start from element M(1,1)
i <- j <- 1;
s <- 1; # first element assigned to M(1,1)
M[i,j] = s;
repeat {
# fill row from left to right
idx <- tail(which(is.na(M[i,])),1);
M[i,j:idx] <- s + (0:(idx-j));
s <- s + idx - j;
j <- idx;
if (all(!is.na(M))) break
# fill column from top to bottom
idx <- tail(which(is.na(M[,j])),1);
M[i:idx,j] <- s + (0:(idx-i));
s <- s + idx - i;
i <- idx;
if (all(!is.na(M))) break
# fill row from right to left
idx <- head(which(is.na(M[i,])),1);
M[i,j:idx] <- s + (0:(j-idx));
s <- s + j - idx;
j <- idx;
if (all(!is.na(M))) break
# fill column from bottom to top
idx <- head(which(is.na(M[,j])),1);
M[i:idx,j] <- s + (0:(i-idx));
s <- s + i-idx;
i <- idx;
if (all(!is.na(M))) break
}
M
}
, такое что
> SpiralMatrix(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 16 17 18 19 6
[3,] 15 24 25 20 7
[4,] 14 23 22 21 8
[5,] 13 12 11 10 9
> SpiralMatrix(4)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 12 13 14 5
[3,] 11 16 15 6
[4,] 10 9 8 7