當我運行一個簡單的for循環來計算向量的X個排列時,sample()函數爲每次迭代返回相同的排列。R - for循環中的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'的結果)。兩件完全不同的事情。查看我的答案(在我看到您的更新之前編寫)以獲取更多詳細信息。 –