在 R 中生成具有 8 个零和 2 个的 10 元素向量的排列

Generating permutations of a 10-element vector with 8 zeros and 2 ones in R

我正在生成 0 和 1 的 10 元素向量,并将 1 的可能数量从 2 变为 9。

例如 2 个值 = 1

1000000010

3 个值 = 1

1010100000

编辑:我想有效地生成所有可能的组合。

我有一种粗略的方法可以做到这一点,但我猜想有一种更简单的方法可以使用某种排列函数来实现。

我的方式: 使用 R 中的 sample 函数:我从一个全零向量开始,从 1 到 10 不加替换地抽取 2 个随机数,并将它们用作向量中元素的索引以更改为 1。我经常这样做很多次然后把我们的副本扔掉。

mat <- matrix(data = 0,nrow = 1000,ncol = 10) #matrix to hold output
vect <- rep(NA, 1000) 
v0 <- rep(0,10)                              #initial vector of all 0s
for(i in 1:dim(mat)[1]){
  mat[i, sample(1:10, 2)] <- 1

  vect[i] <- paste(mat[i,], collapse = "")   #collapse vector to a string
}

mat[duplicated(vect) !=T,]                       #remove duplicates

这是一种迂回的方法,但可以完成工作。

要在 10 元素向量中生成所有包含 2 个 1 的排列,请使用 combn(10,2) 枚举所有可能的位置:

t(apply(combn(10,2),2,function(x){ tmp<-rep(0,10); tmp[x]<-1; return(tmp) }))

这 returns 45 种不同的排列与使用采样的 OP 代码的结果相同,但效率更高。