他のブロックの一意の要素ごとにランダムな順列が取得されるように、別の変数ブロックによって (sample() 関数を使用して) ベクトルのランダムな順列を作成しています。ただし、ブロック内の一意の要素が大きくなると、数順列のサイズが変化します。unlist() 関数がスペースホルダーを作成しているかどうか、またはなぜこれが起こっているのかはわかりません。以下のコード例を参照してください。block1 を使用した順列の次元は元の変数の長さですが、block2 の方が長くなります。コードがこれを行っている理由に私は唖然とします。何かご意見は?
x <- sample(1:3, 250, replace = TRUE)
block1 <- sample(1:20, 250, replace = TRUE)
block2 <- sample(1:100, 250, replace = TRUE)
block_permutation = function(x, block) unlist(as.vector(sapply(unique(block), function(j) sample(x[block==j]))))
perm1<- sapply(1:2, function(i) block_permutation(x, block1))
perm2<- sapply(1:2, function(i) block_permutation(x, block2))
dim(perm1)
dim(perm2)