単純なforループを実行してベクトルのX個の置換を計算すると、sample()関数は各繰り返しに対して同じ置換を返します。以下はforループ内のR - sample()は同じ順列を生成しますか?
は私のコードです:
options <- commandArgs(trailingOnly=T)
labels <- read.table(options[2], header=F)
holder <- c()
for (i in 1:options[1]){
perm <- sample(labels[,2:ncol(labels)], replace=F)
perm <- cbind(as.character(labels[1]), perm)
holder <- rbind(holder, perm)
}
write.table(holder, file=options[3], row.names=F, col.names=F, quote=F, sep='\t')
は、これがそうである理由はありますか?ベクトルの1000の順列を生成する別の簡単な方法がありますか?コメントの後に追加しました
* - 複製例 *
vec <- 1:10
holder <-c()
for (i in 1:5){
perm <- sample(vec, replace=F)
holder <- rbind(holder, perm)
}
> holder
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
perm 3 2 1 10 9 6 7 4 5 8
perm 5 8 2 3 4 10 9 1 6 7
perm 10 7 3 1 4 2 5 8 9 6
perm 9 5 2 8 3 1 6 10 7 4
perm 3 7 5 6 8 2 1 9 10 4
そして、これは正常に動作します!私はどこかにバグがあると思います!私の入力はおそらく混乱している。
おかげで、 D.
再現性例えばおかげで、 D.
結果を複製する方法がわかりません。私に手を差し伸べるためのケア? http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –
再現可能な例では、ベクトル( 'vec')をサンプリングしています。オリジナルでは、データフレームをサンプリングしています( 'read.table'の結果)。 2つの非常に異なるもの。詳細については私の答えを見てください(あなたのアップデートを見た前に書いてあります)。 –