私はランダム化プロセスをシミュレートしようとしています。私はwhileループを使わなければならないと思うし、私は自分のRコードで達成しようとしているものをどのように構造化するのかよく知らない。ランダム化スキームのプログラミングwhileループ
私は、3つのクラスa、b、cをそれぞれ3:2:1の比率で配布したいと考えています。この比率では、これらのクラスの設定最小限の平衡」を含むベクターは、このようなものになります。
class_1<-"a"
class_2<-"b"
class_3<-"c"
ratio_a<-3
ratio_b<-2
ratio_c<-1
min_set<-c(rep(class_1,ratio_a),rep(class_2,ratio_b),rep(class_3,ratio_c))
をこの最小セットは、次のようなものになります。
min_set
"a""a""a""b""b""c"
をさんは、私がしたいとしましょう
block_1<-matrix(0,k,length(min_set))
for(i in 1:k)
block_1[i,]<-min_set
これは私のmin_set
で新しいマトリックスを作成します。この最小限のバランスの取れたセットのk
数が、私はこのようなものを作成することができていますk
行のベクトル。
のは、今これはと行うことができます(治療の割り当てをc)サンプルのクラス(A、B、によって決定されるだろう)私は交換せずにblock_1
からサンプリングしたいとしましょう:
sample(as.vector(block_1),n,replace=F)
からここで、私は(amonkのおかげ)としてmin_set
の全てのサンプリング結果の順列を列挙することができます。
myList <- permn(min_set)
all_out <- data.table(matrix(unlist(myList),byrow = T,ncol = 6))
All_outはmin_setの各順列を表す行のDFです。ここで私は助けが必要です。
は私がmin_set
のサンプル1つの順列(すべてのアウトの行の1つ)を持つまでblock_1
から採取したいのは、
#Create inactive urn
block_2<-vector('numeric',length=dim(block_1)[1]*dim(block_1)[2])
第二のブロックを作成してみましょう。私のコードは、この(現在は動作していない)のようなものになります。私はblock_2
でmin_set
を達成したら
while (block[2]!='any row of all_out'){
for (i in 1:(dim(block_1)[1]*dim(block_1)[2]))
block_2[i]<-sample(as.vector(block_1),i,replace=F)
}
を、私は、p-6のサンプル(すなわちを保ち、block_2から戻っblock_1にmin_setを返却したいのですがmin_setの一部ではないもの)をblock_2に格納します。
事前に指定された数の割り当てが行われるまで繰り返します。
私は私のためにいくつかのpsedoコードを追加しました質問 – lecreprays
@lecrepraysあなたが説明するようなもっと現実的なアプローチを追加することができますが、今回はいくつかのサンプルデータフレームを追加します – amonk
私はいくつかの例を追加しました。いくつかのサンプルデータを整理しようとしていますが、うまくいけば私の質問がより明確になりました。 – lecreprays