jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

R言語を利用してリスト要素の順序をランダム化

今回は少しトリッキーというかあまりほかの人には役立たないかもしれない話題です。リストを何かの順序で規則正しく並べ替えることはよくあると思います。順番良く並べてリスト全体を見やすくするようなときです。今回は、この逆で順序良く並んでいるものをどうやって崩すかを考えます。そして、今回はR言語を使います。

やり方その1:任意の二つの要素を並べ替える

行列の中から適当に2つの要素を選び、その2つの要素を入れ替えます。これを何回も繰り返して、次第にバラバラの順序になることを目指します。

#最初のベクトル
ori <- seq(1,10)

randomReplace <- function(vector){
   sequence <- seq(1,length(vector))
   replacePoint1 <- sample(sequence,1)
   replacePoint2 <- sample(sequence,1)
   replaceValue1 <- vector[replacePoint1]
   replaceValue2 <- vector[replacePoint2]

   vector[replacePoint1] <- replaceValue2
   vector[replacePoint2] <- replaceValue1

   return(vector)
 }
for ( i in 1:100){
	ori<- randomReplace(ori)
}
print(ori)

やり方その2: ランダムな数字を入れた行列を作る

#最初のベクトル
ori <- seq(1,10)

randomReplace2 <- function(vector){
	randomvector <- runif(length(vector))
        ordervector <- order(randomvector)
        newori <- rep(NA,length(vector))
        for (i in 1:length(vector)){
          newori[ordervector[i]] <- ori[i]
        }
        return(newori)
}
ori <- randomReplace2(ori)

どちらがいいのか

ランダム性を基準としてどちらがより効率的かを評価できるのかもしれないです。が今日はここまで。