【R】行/列方向に重複のないランダム順序のn×n行列生成

n×nの行列に1~nまでの数字をランダムにn個ずつ割り振り、行または列方向には各数字が1回しか登場しない行列を作成するプログラムです。

This function returns a n-by-n matrix contains random ordered 1,…,n. Each number appears only once at each row/column position.

Like This↓

4123
1234
2341
3412
randOrderedMatrix <- function(n) {
    # This function returns a n-by-n matrix contains random ordered 1...n.
    # Each number appears only once at each row/column position.
    # Usage:
    # Y = randOrderedMatrix(n)
    #
    # e.g.
    # A = randOrderedMatrix(4)
    # A =
    #     4  1  2  3
    #     1  2  3  4
    #     2  3  4  1
    #     3  4  1  2
    # 
    # 2020/02/26 coded by Haruhiko Iwaoki
    
    #make a ordered matrix
    A <- matrix(0, nrow = n, ncol = n)
    A[,1] <- 1:n
    for(i in 1:n-1) {
        A_i <- A[,1] + i
        A_i[A_i > n] <- A_i[A_i > n] - n
        A[,i+1] <- A_i
    }

    #random permutation in row dimension
    r <- sample(A[,1])
    A <- A[r,]
    
    #random permutation in column dimension
    r <- sample(A[,1])
    A <- A[,r]
    
    return(A)
}
【R】行/列方向に重複のないランダム順序のn×n行列生成

コメントを残す

メールアドレスが公開されることはありません。

トップへ戻る