今回は少しトリッキーというかあまりほかの人には役立たないかもしれない話題です。リストを何かの順序で規則正しく並べ替えることはよくあると思います。順番良く並べてリスト全体を見やすくするようなときです。今回は、この逆で順序良く並んでいるものをどうやって崩すかを考えます。そして、今回は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)
どちらがいいのか
ランダム性を基準としてどちらがより効率的かを評価できるのかもしれないです。が今日はここまで。